NSMutableArray丢失所有对象

我的NSMutableArray正在丢失我从Facebooksearch中添加的所有数据。 我已经循环遍历每个迭代循环正确运行,并添加所有的数据,但一旦执行此代码,我的NSMutableArrays恢复为零对象。 有没有办法做所有的添加发生在请求连接? 虽然arrays被剥离并初始化,但我不明白为什么会出现这个问题。 任何帮助感激!

在我的ViewDidLoad

 _namesArray = [[NSMutableArray alloc] init]; _categoryArray = [[NSMutableArray alloc] init]; [FBRequestConnection startWithGraphPath:@"search?q=food&type=place&center=51.89,-8.472&distance=1000" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog([NSString stringWithFormat:@"user events: %@", result]); NSArray *test = [result objectForKey:@"data"]; for (FBGraphObject *obj in test) { if ([obj objectForKey:@"category"]){ [_namesArray addObject:[obj objectForKey:@"category"]]; } if ([obj objectForKey:@"name"]){ [_categoryArray addObject:[obj objectForKey:@"name"]]; } } } else { NSLog([NSString stringWithFormat:@"error %@", error.description]); } }]; 

头文件

 @property (strong, nonatomic) NSMutableArray *namesArray; @property (strong, nonatomic) NSMutableArray *categoryArray; 

在asynchronous执行的completionHandler ,数组被填充。 这似乎是你的问题的原因是你试图从completionHandler访问数组。 其实你应该使用completionHandler数组或者从这个块开始另一个方法。

 _namesArray = [[NSMutableArray alloc] init]; _categoryArray = [[NSMutableArray alloc] init]; // 1 - Start request [FBRequestConnection startWithGraphPath:@"search?q=food&type=place&center=51.89,-8.472&distance=1000" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { // 3 - request is finished. Fill the arrays if (!error) { NSLog([NSString stringWithFormat:@"user events: %@", result]); NSArray *test = [result objectForKey:@"data"]; for (FBGraphObject *obj in test) { if ([obj objectForKey:@"category"]){ [_namesArray addObject:[obj objectForKey:@"category"]]; } if ([obj objectForKey:@"name"]){ [_categoryArray addObject:[obj objectForKey:@"name"]]; } } } else { NSLog([NSString stringWithFormat:@"error %@", error.description]); } // Use arrays. For example, reload UITableView [_tableView reloadData]; }]; // 2 - now request is not finished yet 

我敢打赌你误解了执行的stream程

 //Point 1. ode executed first [FBRequestConnection startWithGraphPath:@"search?q=food&type=place&center=51.89,-8.472&distance=1000" completionHandler: ^(FBRequestConnection *connection, id result, NSError *error) { //Point 3. Code executed last, once the network request is finished. } //Point 2. Code executed second 

如果你在第2点检查你的数组,他们将不会被填充。 数组将不会被填充,直到完成处理程序在一段时间后触发。