所以,我有一个实例变量_poze,这是一个NSMutableArray.I有以下代码,我在其中添加对象到我的数组_poze:
for(int i=0;i<[picIDs count];i++){
str = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture",picIDs[i]];
FBRequest *fbr = [FBRequest requestWithGraphPath:picIDs[i] parameters:nil HTTPMedthod:nil];
[fbr startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError* error){
NSLog(@"%@",result);
[_poze addObject:[result valueForKeyPath:@"cover.source"]];
}];
}
这个问题是,即使我从块中得到结果,数组也会添加对象,但在退出该块之后,我的_poze数组会再次显示0个对象。这就是为什么会发生这种情况的原因?
答案 0 :(得分:0)
FBRequest
完成处理程序与startWithCompletionHandler
的调用异步调用。当实际网络请求完成时,将调用完成处理程序块。由于您在紧密循环中创建了大量请求,因此您只需将它们排队。他们甚至不会开始,直到for循环退出并且堆栈展开。
_poze
将开始填充结果,无论它们完成的顺序如何。