Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS¿ª·¢Ö®Ç³Ì¸MVVMµÄ¼Ü¹¹Éè¼ÆÓëÍŶÓЭ×÷
 
×÷ÕߣºÇàÓñ·ü°¸ À´×ÔÓÚ£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-8-25
  2075  次浏览      28
 

½ñÌìдÕâÆª²©¿ÍÊÇÏë´ïµ½Å×שÒýÓñµÄ×÷Óã¬ÏëÓë´ó¼Ò½»Á÷Ò»ÏÂ˼Ï룬Ï໥ѧϰ£¬²©ÎÄÖÐÓв»×ãÖ®´¦»¹Íû´ó¼ÒÅúÆÀÖ¸Õý¡£±¾Æª²©¿ÍµÄÄÚÈÝÑØÏ®ÒÔÍù²©¿ÍµÄ·ç¸ñ£¬Ò²ÊÇÒԸɻõΪÖ÷£¬Å¼¶û³¶³¶Ï̵°(¹þ¹þ~²»ºÃºÃ¹¤×÷ÓÖ¿ªÊ¼·¢±í²©¿ÍÀ²~)¡£

ÓÉÓÚ±¾ÈËÏîÄ¿¾­ÑéÓÐÏÞ£¬¹ØÓڼܹ¹Éè¼Æ·½ÃæµÄ¶«Î÷Àí½âÓÐÏÞ£¬ÎÒ¸öÈ˶ÔMVVMµÄÀí½âÖ÷ÒªÊÇ½è¼øÓÚ֮ǰµÄÓùýµÄMVCµÄWeb¿ò¼Ü~ÔÚѧУµÄʱºòÓùýThinkPHP¿ò¼Ü£¬ºÍSSH¿ò¼Ü£¬¶¼ÊÇMVCµÄ¼Ü¹¹Ä£Ê½£¬½ñÌìMVVMÓ봫ͳµÄMVC¿ÉνÊǼ«ÎªÏàËÆ£¬Ò²¿ÉÒÔ˵ÊÇÐֵܹØÏµ£¬Ò²¾ÍÊÇÒ»¼ÒÈËÁË¡£

˵µÀ¼Ü¹¹Éè¼ÆºÍÍŶÓЭ×÷£¬Õâ¸ö¶ÔAppµÄ¿ª·¢»¹ÊDZȽÏÖØÒªµÄ¡£¼´Ê¹×÷Ϊһ¸öרҵµÄ°áשÕߣ¬Ç°ÌáÊÇÄãÕâש°áÍê·ÅÔÚÄÄ£¿²»Ö»ÊÇCodeÓпò¼Ü£¬ÆäËûµÄ¶«Î÷¶¼ÊÇÓпò¼ÜµÄ£¬±ÈÈçÇÅÁºµÈµÈÉñÂíµÄ~ÔÚÕâ¶ù¾Í²»ÍùÍâ³¶ÁË¡£Ò»¸öºÃµÄ¹¤³Ì¿ò¼Ü²»½ø¿ÉÒÔÌá¸ßÍŶӵÄЭ×÷ЧÂÊ£¬Í¬Ê±»¹¿ÉÒÔ¼õÉÙ´úÂëµÄÈßÓà¶ÈºÍñîºÏÐÔ£¬ºÏÀíµÄ·Ö¹¤ÓëϵͳµÄ¼Ü¹¹Éè¼ÆÊÇÉÙ²»Á˵ġ£

ÖÁÓÚÍŶÓЭ×÷²»½ö½öÊÇÓÐSVN»òÕßGitÕâЩ°æ±¾¿ØÖƹ¤¾ß¾ÍÐеģ¬ÖÁÓÚÈçºÎÔÚiOS¿ª·¢ÖÐʹÓÃSVN,Çë²Î¿¼Ö®Ç°µÄ²©¿Í£¨iOS¿ª·¢Ö®°æ±¾¿ØÖÆ£¨SVN£©£©¡£Ò»¸öÍŶӿÉÒÔ¸ßЧµÄ¹¤×÷£¬±¾È˾õµÃ½»Á÷ÊÇ×îÎªÖØÒªµÄ£¬ÍŶÓÖеÄÿ¸öÈ˶¼±È½ÏºÍÆø£¬¶øÇÒ½»Á÷ÉÏûÓÐʲôÕϰ­£¬½»Á÷ÔÚÍŶÓÖÐ×îÎªÖØÒª¡£ÖÁÓÚSVNÔõôÓã¬ÄǶ¼²»ÊÇʶù£¡

ºÃÁ˽ñÌì¾ÍÒÔÎÒдµÄÒ»¸öDemoÀ´Ç³Ì¸Ò»ÏÂiOS¿ª·¢Öеļܹ¹Éè¼ÆºÍÍŶÓЭ×÷£¬½ñÌìµÄÏ̵°Ïȵ½Õâ¶ù£¬ÇÐÈë½ñÌìµÄ»°Ìâ¡£

ΪÁËд½ñÌìµÄ²©¿ÍÎÒ»¨Á˵ãʱ¼ä×öÁ˸ö¹¤³Ì£¬Õâ¸ö¹¤³Ìºǫ́µÄ½Ó¿ÚÓõÄÐÂÀË΢²©µÄAPIÀ´½øÐвâÊԵģ¬ÔÚ±¾ÎĵĺóÃæÒ²»á¸úÉÏGitHubµÄ·ÖÏíÁ´½Ó¡£OK~˵µÄ¸ß´óÉÏһЩ¾ÍÊÇ£¬ÈÊÕß¼ûÈÊÖÇÕß¼ûÖÇ£¬½»Á÷˼Ï룬¹²Í¬Ñ§Ï°¡£

Ò»¡¢Ð¡×ÃÒ»ÏÂMVVM

ÔÚÕâÄØÒ²²»×¸ÊöʲôÊÇMVC,ÉñÂíÓÖÊÇMVVMÁË,ÔÚ°Ù¶ÈÉϹȸèÒ»ÏÂÒ»×¥Ò»´ó°Ñ£¬ÔÚÕâ¶ù¾Í¼òµ¥µÄÌáÉÏÒ»×ì¡£ÏÂÃæµÄDemoÓõľÍÊÇMVVMµÄ¼Ü¹¹Ä£Ê½¡£

Model²ãÊÇÉÙ²»Á˵ÄÁË£¬ÎÒÃǵÃÓж«Î÷³äµ±DTO(Êý¾Ý´«Êä¶ÔÏó)£¬µ±È»£¬ÓÃ×ÖµäÒ²ÊÇ¿ÉÒԵ쬱à³Ìô£¬ÒªÁé»îһЩ¡£Model²ãÊDZȽϱ¡µÄÒ»²ã£¬Èç¹ûѧ¹ýJavaµÄС»ï°éµÄ»°£¬¶ÔJavaBeanÓ¦¸Ã²»Ä°Éú°É¡£

ViewModel²ã£¬¾ÍÊÇViewºÍModel²ãµÄÕ³ºÏ¼Á£¬ËûÊÇÒ»¸ö·ÅÖÃÓû§ÊäÈëÑéÖ¤Âß¼­£¬ÊÓͼÏÔʾÂß¼­£¬·¢ÆðÍøÂçÇëÇóºÍÆäËû¸÷ÖÖ¸÷ÑùµÄ´úÂëµÄ¼«ºÃµÄµØ·½¡£Ëµ°×ÁË£¬¾ÍÊǰÑÔ­À´ViewController²ãµÄÒµÎñÂß¼­ºÍÒ³ÃæÂß¼­µÈ°þÀë³öÀ´·Åµ½ViewModel²ã¡£

View²ã£¬¾ÍÊÇViewController²ã£¬ËûµÄÈÎÎñ¾ÍÊÇ´ÓViewModel²ã»ñÈ¡Êý¾Ý£¬È»ºóÏÔʾ¡£

ÉÏÃæ¶ÔMVVM¾ÍÏȼòµ¥µÄÕâôһ˵£¬ºÃºÃµÄÀí½â²¢Ó¦Óõϰ£¬»¹µÃʵս¡£

¶þ¡¢¹ØÓÚ¹¤³ÌÖÐÊÇ·ñʹÓÃStoryBoardµÄÂÛÊö

´ÓÍøÉϾ­³£¿´µ½Ëµ²»ÍƼöʹÓÃStoryBoard»òÕßXib,ÍÆ¼öÓô¿´úÂëÊÖд¡£¸öÈËÈÏΪÕâÖÖ¹ÛµãÊÇºÍÆ»¹ûÉè¼ÆStoryBoardµÄ³õÖÔÏà㣵ģ¬ÔÚÎÒ×ö¹ýµÄÏîÄ¿ÖÐÊÇÒÔStoryBoardΪÖ÷£¬xibΪ¸¨£¬È»ºóÓôúÂëÕûºÏÿ¸öStoryBoard.

¾ÙÒ»¸öÓÃStoryboardºÃ´¦µÄÀý×Ó¾ÍOKÁË£¬¸ø¿Ø¼þÌí¼ÓÔ¼Êø£¬Èç¹ûÓÃStoryboardÍê³ÉÄÇÊÇ·Ö·ÖÃëµÄÊÂÇ飬¶øÓôúÂëµÄÌí¼ÓÔ¼ÊøµÄ»°ÊǺεȵĶñÐÄ£¬´¿´úÂëдµÄ»°»á°Ñ´óÁ¿µÄʱ¼ä»¨ÔÚдUIÉÏ£¬¶øÇÒ¼¼Êõº¬Á¿ÊDZȽϵ͵ģ¬Õâ¸ö¸öÈËÈÏΪûʲô±ØÒª¡£ÔÚÍŶӺÏ×÷ÖиºÔðUI¿ª·¢µÄС»ï°éÖ»ÐèûÈ˸ºÔðÒ»¸öStoryboard,¸÷¿ª·¢¸÷µÄ£¬ÓÃSVNÌύʱ°ÑÏÂÃæµÄ¹´£¨ÈçÏÂͼ£©È¥µô¼´¿É£¬ÕâÑùÓÃStoryboardÊÇûÓÐÎÊÌâµÄ¡£È»ºóÔÙÓôúÂë½øÐÐÕûºÏ¾ÍOKÁË¡£Èç¹ûÄãÔÚÄãµÄ¹¤³ÌÖмÓÈëÁËеÄ×ÊÔ´ÎļþµÄ»°£¬ÓÃXCode×Ô´øµÄSVNÌá½»µÄ»°ÐèÒª°ÉProject SettingÎļþÒ»²¢Ìá½»¡£

Èý¡¢ÊµÕ½MVVM

£¨ÓÃXcode´´½¨µÄGroupÊÇÐéÄâµÄÎļþ¼Ð£¬ÎªÁ˱ãÓÚά»¤£¬½¨Òé´´½¨ÎïÀíÎļþ¼Ð£¬È»ºóÔÙÊÖ¶¯ÒýÈ룩

1.ÏÂÃæÍ¨¹ýÒ»¸öʵÀýÀ´Ìå»áÒ»ÏÂMVVM¼Ü¹¹Ä£Ê½£¬ÏÂÃæÊǸù¤³ÌµÄÒ»¼¶Ä¿Â¼ÈçÏ£¬Ã¿²ãÖ®¼äµÄ½»»¥ÊÇÓÃBlockµÄÐÎʽÀ´ÊµÏÖµÄ

¹¤³ÌĿ¼˵Ã÷£º

1.Request:Îļþ¼ÐÏÂ´æ´¢ÍøÂçÇëÇóµÄÀ࣬ÏÂÃæ»á¸ø³ö¾ßÌåµÄʵÏÖ

2.Config:¾ÍÊǹ¤³ÌµÄÅäÖÃÎļþ

3.Resource:¾ÍÊǹ¤³ÌµÄ×ÊÔ´Îļþ£¬ÏÂÃæÓÐͼƬ×ÊÔ´ºÍStoryboardÎļþ×ÊÔ´

4.ToolsÊÇ:¹¤¾ßÎļþÀ࣬´æ·Å¹¤¾ßÀ࣬±ÈÈçÊý¾ÝÕýÔòÆ¥ÅäµÈ¡£

5.Vender:´æ·ÅµÚÈý·½Àà¿â

6.Model:Õâ¸ö¾Í²»¶à˵ÁË

7.ViewController:´æ·ÅViewControllerÀà×ÊÔ´Îļþ£¬Ò²¾ÍÊÇView²ã

8.ViewModel£º´æ·Å¸÷ÖÖÒµÎñÂß¼­ºÍÍøÂçÇëÇó

2.Ïê½âRequest:Request¸ºÔðÍøÂçÇëÇóµÄ¶«Î÷£¬¾ßÌåÈçÏ£º

NetRequestClassÊÇ´æ·ÅÍøÂçÇëÇóµÄ´úÂ룬±¾¹¤³ÌÓõÄAF£¬ÒòΪ±¾¹¤³ÌÖ»ÊÇÒ»¸öDemo,ËùÒÔ¾ÍÖ»·â×°Á˼à²âÍøÂç״̬£¬GETÇëÇó£¬POSTÇëÇó·½·¨£¬¸ù¾ÝÏÖʵÐèÒª£¬»¹¿ÉÒÔ·â×°ÉÏ´«ÏÂÔØµÈÀà·½·¨¡£

NetRequestClass.hÖеĴúÂëÈçÏ£º

//  NetRequestClass.h
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/6.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 @interface NetRequestClass : NSObject
12
13 #pragma ¼à²âÍøÂçµÄ¿ÉÁ´½ÓÐÔ
14 + (BOOL) netWorkReachabilityWithURLString:(NSString *) strUrl;
15
16 #pragma POSTÇëÇó
17 + (void) NetRequestPOSTWithRequestURL: (NSString *) requestURLString
18 WithParameter: (NSDictionary *) parameter
19 WithReturnValeuBlock: (ReturnValueBlock) block
20 WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
21 WithFailureBlock: (FailureBlock) failureBlock;
22
23 #pragma GETÇëÇó
24 + (void) NetRequestGETWithRequestURL: (NSString *) requestURLString
25 WithParameter: (NSDictionary *) parameter
26 WithReturnValeuBlock: (ReturnValueBlock) block
27 WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
28 WithFailureBlock: (FailureBlock) failureBlock;
29
30 @end

NetRequestClass.mÖеĴúÂëÈçÏ£º

//  NetRequestClass.m
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/6.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import "NetRequestClass.h"
10
11 @interface NetRequestClass ()
12
13 @end
14
15
16 @implementation NetRequestClass
17 #pragma ¼à²âÍøÂçµÄ¿ÉÁ´½ÓÐÔ
18 + (BOOL) netWorkReachabilityWithURLString:(NSString *) strUrl
19 {
20 __block BOOL netState = NO;
21
22 NSURL *baseURL = [NSURL URLWithString:strUrl];
23
24 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL];
25
26 NSOperationQueue *operationQueue = manager.operationQueue;
27
28 [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
29 switch (status) {
30 case AFNetworkReachabilityStatusReachableViaWWAN:
31 case AFNetworkReachabilityStatusReachableViaWiFi:
32 [operationQueue setSuspended:NO];
33 netState = YES;
34 break;
35 case AFNetworkReachabilityStatusNotReachable:
36 netState = NO;
37 default:
38 [operationQueue setSuspended:YES];
39 break;
40 }
41 }];
42
43 [manager.reachabilityManager startMonitoring];
44
45 return netState;
46 }
47
48
49 /***************************************
50 ÔÚÕâ×öÅжÏÈç¹ûÓÐdicÀïÓÐerrorCode
51 µ÷ÓÃerrorBlock(dic)
52 ûÓÐerrorCodeÔòµ÷ÓÃblock(dic
53 ******************************/
54
55 #pragma --mark GETÇëÇó·½Ê½
56 + (void) NetRequestGETWithRequestURL: (NSString *) requestURLString
57 WithParameter: (NSDictionary *) parameter
58 WithReturnValeuBlock: (ReturnValueBlock) block
59 WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
60 WithFailureBlock: (FailureBlock) failureBlock
61 {
62 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
63
64 AFHTTPRequestOperation *op = [manager GET:requestURLString parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
65 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
66 DDLog(@"%@", dic);
67
68 block(dic);
69
70 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
71 failureBlock();
72 }];
73
74 op.responseSerializer = [AFHTTPResponseSerializer serializer];
75
76 [op start];
77
78 }
79
80 #pragma --mark POSTÇëÇó·½Ê½
81
82 + (void) NetRequestPOSTWithRequestURL: (NSString *) requestURLString
83 WithParameter: (NSDictionary *) parameter
84 WithReturnValeuBlock: (ReturnValueBlock) block
85 WithErrorCodeBlock: (ErrorCodeBlock) errorBlock
86 WithFailureBlock: (FailureBlock) failureBlock
87 {
88 AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
89
90 AFHTTPRequestOperation *op = [manager POST:requestURLString parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
91 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
92
93 DDLog(@"%@", dic);
94
95 block(dic);
96 /***************************************
97 ÔÚÕâ×öÅжÏÈç¹ûÓÐdicÀïÓÐerrorCode
98 µ÷ÓÃerrorBlock(dic)
99 ûÓÐerrorCodeÔòµ÷ÓÃblock(dic
100 ******************************/
101
102 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
103 failureBlock();
104 }];
105
106 op.responseSerializer = [AFHTTPResponseSerializer serializer];
107
108 [op start];
109
110 }
111
112
113
114
115 @end

3.Ïê½âConfig:´´½¨pchÎļþ£¬ºÍConfig.hÎļþ

pchÎļþÒýÈë³£ÓõÄÍ·Îļþ£¬ÄÚÈÝÈçÏ£º

//  PrefixHeader.pch
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/6.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #ifndef MVVMTest_PrefixHeader_pch
10 #define MVVMTest_PrefixHeader_pch
11
12 #import"AFNetworking.h"
13 #import "UIKit+AFNetworking.h"
14 #import "Config.h"
15
16 #import "NetRequestClass.h"
17 #import "SVProgressHUD.h"
18 #endif

Config.hÖоÍÊǸ÷Öֺ궨ÒåºÍ¸÷ÖÖö¾ÙÀàÐͺÍblockÀàÐÍ£¬´úÂëÈçÏ£º

//  Config.h
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/6.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #ifndef MVVMTest_Config_h
10 #define MVVMTest_Config_h
11
12 //¶¨Òå·µ»ØÇëÇóÊý¾ÝµÄblockÀàÐÍ
13 typedef void (^ReturnValueBlock) (id returnValue);
14 typedef void (^ErrorCodeBlock) (id errorCode);
15 typedef void (^FailureBlock)();
16 typedef void (^NetWorkBlock)(BOOL netConnetState);
17
18 #define DDLog(xx, ...) NSLog(@"%s(%d): " xx, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
19
20 //accessToken
21 #define ACCESSTOKEN @"Äã×Ô¼ºµÄaccess_token"
22
23 //ÇëÇ󹫹²Î¢²©µÄÍøÂç½Ó¿Ú
24 #define REQUESTPUBLICURL @"https://api.weibo.com/2/statuses/public_timeline.json"
25
26 #define SOURCE @"source"
27 #define TOKEN @"access_token"
28 #define COUNT @"count"
29
30 #define STATUSES @"statuses"
31 #define CREATETIME @"created_at"
32 #define WEIBOID @"id"
33 #define WEIBOTEXT @"text"
34 #define USER @"user"
35 #define UID @"id"
36 #define HEADIMAGEURL @"profile_image_url"
37 #define USERNAME @"screen_name"
38
39 #endif

4.Ïê½â×ÊÔ´ÎļþResource£¬½á¹¹ÈçÏÂͼ£º

ImageÖоʹæ·Å¸÷ÖÖͼƬ£¨3x,2xµÈ£©£¬InterfaceBuiderÀïÃæ¾ÍÊÇ·ÅһЩXibºÍStoryboardÎļþ£¬Ã¿¸ö¸ºÔðUIµÄ¿ª·¢ÈËÔ±¸ºÔðÒ»¸öStoryboard

5.Ïê½âModel:±¾¹¤³ÌÓõÄÊÇÇëÇ󹫹²Î¢²©½Ó¿ÚÎÒÃÇÐèÒªÔÚÒ³ÃæÉÏÏÖʵÓû§µÄÍ·Ïñ£¬Óû§Ãû£¬·¢²¼ÈÕÆÚ£¬²©ÎÄ£¬ÒѾ­ÒþʽµÄÓû§IDºÍ΢²©ID,ÎļþĿ¼½á¹¹ÈçÏ£º

PublicModelÖеÄÄÚÈÝÈçÏ£º

//  PublicModel.h
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/8.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 @interface PublicModel : NSObject
12 @property (strong, nonatomic) NSString *userId;
13 @property (strong, nonatomic) NSString *weiboId;
14 @property (strong, nonatomic) NSString *userName;
15 @property (strong, nonatomic) NSURL *imageUrl;
16 @property (strong, nonatomic) NSString *date;
17 @property (strong, nonatomic) NSString *text;
18
19 @end

6.Ïê½âViewModel²ã£¬±¾²ãÊÇ×îÎªÖØÒªµÄÒ»²ã£¬ÏÂÃæÊDZ¾²ãµÄÏêϸ½ØÍ¼£¬ViewModeClassÊÇËùÓÐViewModeµÄ¸¸À࣬ÆäÖд洢׏²Í¬²¿·Ö

ViewModelClass.hÖеÄÄÚÈÝÈçÏ£º

//  ViewModelClass.h
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/8.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 @interface ViewModelClass : NSObject
12
13 @property (strong, nonatomic) ReturnValueBlock returnBlock;
14 @property (strong, nonatomic) ErrorCodeBlock errorBlock;
15 @property (strong, nonatomic) FailureBlock failureBlock;
16
17
18 //»ñÈ¡ÍøÂçµÄÁ´½Ó״̬
19 -(void) netWorkStateWithNetConnectBlock: (NetWorkBlock) netConnectBlock WithURlStr: (NSString *) strURl;
20
21 // ´«Èë½»»¥µÄBlock¿é
22 -(void) setBlockWithReturnBlock: (ReturnValueBlock) returnBlock
23 WithErrorBlock: (ErrorCodeBlock) errorBlock
24 WithFailureBlock: (FailureBlock) failureBlock;
25 @end

ViewModelClass.mÖеÄÄÚÈÝÈçÏ£º

//  ViewModelClass.m
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/8.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import "ViewModelClass.h"
10 @implementation ViewModelClass
11
12 #pragma »ñÈ¡ÍøÂç¿Éµ½´ï״̬
13 -(void) netWorkStateWithNetConnectBlock: (NetWorkBlock) netConnectBlock WithURlStr: (NSString *) strURl;
14 {
15 BOOL netState = [NetRequestClass netWorkReachabilityWithURLString:strURl];
16 netConnectBlock(netState);
17 }
18
19 #pragma ½ÓÊÕ´©¹ýÀ´µÄblock
20 -(void) setBlockWithReturnBlock: (ReturnValueBlock) returnBlock
21 WithErrorBlock: (ErrorCodeBlock) errorBlock
22 WithFailureBlock: (FailureBlock) failureBlock
23 {
24 _returnBlock = returnBlock;
25 _errorBlock = errorBlock;
26 _failureBlock = failureBlock;
27 }
28
29 @end

PublicWeiboViewModel.hÖеÄÄÚÈÝÈçÏ£º

//  PublicWeiboViewModel.h
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/8.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import "ViewModelClass.h"
10 #import "PublicModel.h"
11
12 @interface PublicWeiboViewModel : ViewModelClass
13 //»ñȡΧ²±Áбí
14 -(void) fetchPublicWeiBo;
15
16 //Ìø×ªµ½Î¢²©ÏêÇéÒ³
17 -(void) weiboDetailWithPublicModel: (PublicModel *) publicModel WithViewController: (UIViewController *)superController;
18 @end

PublicWeiboViewModel.mÖеÄÄÚÈÝÈçÏ£º

//  PublicWeiboViewModel.m
3 // MVVMTest
4 //
5 // Created by ÀîÔó³ on 15/1/8.
6 // Copyright (c) 2015Äê ÀîÔó³. All rights reserved.
7 //
8
9 #import "PublicWeiboViewModel.h"
10 #import "PublicDetailViewController.h"
11
12 @implementation PublicWeiboViewModel
13
14 //»ñÈ¡¹«¹²Î¢²©
15 -(void) fetchPublicWeiBo
16 {
17 NSDictionary *parameter = @{TOKEN: ACCESSTOKEN,
18 COUNT: @"100"
19 };
20 [NetRequestClass NetRequestGETWithRequestURL:REQUESTPUBLICURL WithParameter:parameter WithReturnValeuBlock:^(id returnValue) {
21
22 DDLog(@"%@", returnValue);
23 [self fetchValueSuccessWithDic:returnValue];
24
25 } WithErrorCodeBlock:^(id errorCode) {
26 DDLog(@"%@", errorCode);
27 [self errorCodeWithDic:errorCode];
28
29 } WithFailureBlock:^{
30 [self netFailure];
31 DDLog(@"ÍøÂçÒì³£");
32
33 }];
34
35 }
36
37
38
39 #pragma »ñÈ¡µ½ÕýÈ·µÄÊý¾Ý£¬¶ÔÕýÈ·µÄÊý¾Ý½øÐд¦Àí
40 -(void)fetchValueSuccessWithDic: (NSDictionary *) returnValue
41 {
42 //¶Ô´Óºǫ́»ñÈ¡µÄÊý¾Ý½øÐд¦Àí£¬È»ºó´«¸øViewController²ã½øÐÐÏÔʾ
43
44 NSArray *statuses = returnValue[STATUSES];
45 NSMutableArray *publicModelArray = [[NSMutableArray alloc] initWithCapacity:statuses.count];
46
47 for (int i = 0; i < statuses.count; i ++) {
48 PublicModel *publicModel = [[PublicModel alloc] init];
49
50 //ÉèÖÃʱ¼ä
51 NSDateFormatter *iosDateFormater=[[NSDateFormatter alloc]init];
52 iosDateFormater.dateFormat=@"EEE MMM d HH:mm:ss Z yyyy";
53
54 //±ØÐëÉèÖ㬷ñÔòÎÞ·¨½âÎö
55 iosDateFormater.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
56 NSDate *date=[iosDateFormater dateFromString:statuses[i][CREATETIME]];
57
58 //Ä¿µÄ¸ñʽ
59 NSDateFormatter *resultFormatter=[[NSDateFormatter alloc]init];
60 [resultFormatter setDateFormat:@"MMÔÂddÈÕ HH:mm"];
61
62 publicModel.date = [resultFormatter stringFromDate:date];
63 publicModel.userName = statuses[i][USER][USERNAME];
64 publicModel.text = statuses[i][WEIBOTEXT];
65 publicModel.imageUrl = [NSURL URLWithString:statuses[i][USER][HEADIMAGEURL]];
66 publicModel.userId = statuses[i][USER][UID];
67 publicModel.weiboId = statuses[i][WEIBOID];
68
69 [publicModelArray addObject:publicModel];
70
71 }
72
73 self.returnBlock(publicModelArray);
74 }
75
76 #pragma ¶ÔErrorCode½øÐд¦Àí
77 -(void) errorCodeWithDic: (NSDictionary *) errorDic
78 {
79 self.errorBlock(errorDic);
80 }
81
82 #pragma ¶ÔÍøÂ·Òì³£½øÐд¦Àí
83 -(void) netFailure
84 {
85 self.failureBlock();
86 }
87
88
89 #pragma Ìø×ªµ½ÏêÇéÒ³Ãæ£¬ÈçÐèÍøÂ·ÇëÇóµÄ£¬¿ÉÔÚ´Ë·½·¨ÖÐÌí¼ÓÏàÓ¦µÄÍøÂçÇëÇó
90 -(void) weiboDetailWithPublicModel: (PublicModel *) publicModel WithViewController:(UIViewController *)superController
91 {
92 DDLog(@"%@,%@,%@",publicModel.userId,publicModel.weiboId,publicModel.text);
93 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
94 PublicDetailViewController *detailController = [storyboard instantiateViewControllerWithIdentifier:@"PublicDetailViewController"];
95 detailController.publicModel = publicModel;
96 [superController.navigationController pushViewController:detailController animated:YES];
97
98 }
99
100
101 @end

7.ViewController²ãµÄĿ¼½á¹¹ÈçÏ£º

ÉÏÃæµÄ´úÂë¾Í²»Ò»Ò»Õ³ÁË£¨Ö÷ÒªÊÇÊÖ°´command + C °´ÀÛÁË£©£¬ºóÃæµÄÁ´½Ó»áÓÐÔ´Âë

8.storybordÖеĽṹÈçÏ£º

ÔËÐеÄ×îÖÕЧ¹û£º

9.ÍêÕûĿ¼½á¹¹£¬Ò³Ãæ¼äµÄÒµÎñÂß¼­£¬ºÍÍøÂçµÄÇëÇóÊý¾ÝÊÇ·ÅÔÚViewModel²ãµÄ£¬µ±È»ÁËÕâÒ²²»ÊǾø¶ÔµÄ£¬ÒªÁé»î°ÑÎÕ¡£ÎÒ¸öÈËÊÇÌØ±ðϲ»¶±à³ÌµÄ£¬ÒòΪ±à³ÌÁé»îÆðÀ´¾Í»áºÜÓÐÀÖȤ¡£

10.²©ÎÄ¿ì½áÊøÁË£¬ÔÚÕâ¶ùÔÚ×ܽáÒ»ÏÂSVNʹÓÃÆµÂʱȽϸߵĶøÇұȽÏÖØÒªµÄÃüÁî°É£¨µ±È»£¬±¾ÈËÆ½Ê±Ö÷ÒªÊÇÓÃXCode×Ô´øµÄSVN¿ÉÊÓ»¯¹ÜÀí~£©

£¨1£©¡¢¸üб¾µØ´úÂëÃüÁî

1.1 svn up ¸üа汾

1.2 svn info ²é¿´µ±Ç°°æ±¾ÐÅÏ¢

£¨2£©¡¢´úÂëµÄÌá½»

2.1 svn info ²é¿´µ±Ç°±¾µØ°æ±¾ÐÅÏ¢

2.2 svn up ¸üе½×îа汾ÐÅÏ¢

2.3 svn st ²é¿´Îļþ״̬ M-ÐÞ¸Ä D-ɾ³ý A-Ìí¼Ó U-¸üР?-δ֪״̬ !-¾¯¸æ C-³åÍ»

2.4 svn add fileName: Èç¹û³öÏÖ£¿Ò»°ãÊÇÌí¼ÓÎļþʱ³öµÄÎÊÌ⣬ÔÚ°ÑÎļþsvn add fileNameһϺ󣬸ÃÎļþµÄ״̬»á¸Ä³ÉA

2.5 svn del fileName:Èç¹û³öÏÖ£¡Ò»°ãÊÇɾ³ýÎļþʱ»á³öÏֵľ¯¸æÐèѽִÐÐsvn del fileNameÃüÁîºó£¬¸ÃÎļþµÄ״̬»á¸Ä³ÉD

2.6 svn ci -m"Ìá½»µÄÔ­Òò"

   
2075 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ

ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ