iOS学习过程中的网络数据请求问题

1.新建一singleview  再新建一个试图控制器twocontrol
2.在AppDelegate中注册一个页面跳转的消息

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeVC) name:@"changeVC" object:nil];
 初始化第二个试图控制器的实例对象 otherVC
-(void)changeVC
{
     self.window.rootViewController = self.otherVC;
}
3.在ViewController中   #import "Status.h"数据类
button跳转的实现

-(IBAction)changeVC:(id)sender
{
      分析:下载的数据是一个大字典dic{ n个数组ad=();数组statue是一个字典=({  id=00 ;字典user={a=0;b=1 } },{ })}  
   将数据写到jsonTest.json数据内容的文件到工程里
   取数据要领将需要取的数据单独写一个类statue   user的数据再建一个类


       //将JSON格式的数据文件的路径找出 
       NSString* path = [[NSBundle mainBundle] pathForResource:@"jsonTest" ofType:@"json"];
       //将数据放入NSData中
       NSData* data = [NSData dataWithContentsOfFile:path];
     
       //JSON解析返回一个字典( xcode自带的解析方法)NSJSONSerialization
       NSDictionary* dic =   [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeav es error:nil];
       NSLog(@"%@",dic);
     
       //初始化一个数组
       NSMutableArray* tempArr = [NSMutableArray array];
       NSArray* arr = [dic objectForKey:@"statuses"];
       NSLog(@"arr = %@",arr);
       //将数组中的字典放入Status模型中,大家在这里会有一个疑问将数组中的字典都放入模型中,怎么区分不同数组中的数据?
       for (NSDictionary* item in arr) {
             
               //答案在statusWithJsonDictionary :的类方法中见该方法注释
               Status* status = [Status statusWithJsonDictionary :item];
             
               //将Status类的对象放入数组中
               [tempArr addObject:status];
       }
     
     
       //将tempArr数组通过消息中心发送到试图控制器twocontrol中@"getArray" 消息对应的方法中传送数据
       [[NSNotificationCenter defaultCenter] postNotificationName:@"getArray" object:tempArr];
     
       //切换视图控制器
       [[NSNotificationCenter defaultCenter] postNotificationName:@"changeVC" object:nil];
}


3.在twoviewcontrol中   包含 #import "Status.h"数据类
@property (strong , nonatomic) NSArray* statusArr;
/ /响应消息中心传数据的方法消息
-(id)init
{
       if (self = [super init]) {
               [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getArray:) name:@"getArray" object:nil];
       }
       return self;
}
//接受数据对象
-(void)getArray:(NSNotification*)aNotification
{
       self.statusArr = aNotification.object;
   
}
- (void)viewDidLoad
{
       [super viewDidLoad];
    //添加一个响应显示数据的button
       UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
       btn.frame = CGRectMake(30, 30, 30, 30);
       [self.view addSubview:btn];
       [btn addTarget:self action:@selector(displayUserInfo) forControlEvents:UIControlEventTouchUpIns ide];
}
//实现方法
-(void)displayUserInfo
{
       Status* status = [self.statusArr objectAtIndex:0];
       NSLog(@"status.userID = %@",status.userID);
       NSLog(@"status.user.screen_name = %@",status.user.screen_name);
}
4.新建的数据status类继承nsobject
#import
    包含嵌套的user数据类 #import "User.h"

@interface Status : NSObject
@property (strong, nonatomic) NSString* userID;

//将多个字典嵌套的数据取出的思路是为每一个字典对应的建一个数据模型的类
//例如:User类

@property (strong , nonatomic) User* user;
.m中实现
-(Status*)initWithJsonDictionary:(NSDictionary *)dic
{
       if (self = [super init]) {
               self.userID = [dic objectForKey:@"idstr"];
               NSDictionary* userDic = [dic objectForKey:@"user"];
               if (userDic) {
                       self.user = [User UserWithJsonDictionary:userDic];   
               }   
       }
       return self;
}
//返回的是类的对象
//用这个类方法进行初始化的时候,都会alloc一次,因此就会新分配一块空间

+(Status*)statusWithJsonDictionary :(NSDictionary *)dic
{
         return [[Status alloc] initWithJsonDictionary:dic];
}

5.数据user类
@interface User : NSObject
@property (strong, nonatomic) NSString* screen_name;

-(User*)initWithJsonDictionary:(NSDictionary *)dic
{
       if (self = [super init]) {
               self.screen_name = [dic objectForKey:@"screen_name"];     
       }
       return self;
}
+(User*)UserWithJsonDictionary:(NSDictionary *)dic
{
            //用这个类方法进行初始化的时候,都会alloc一次,因此就会新分配一块空间
       return [[User alloc] initWithJsonDictionary:dic];
}

你可能感兴趣的:(iOS学习过程中的网络数据请求问题)