我正在将Facebook用户信息数据放入NSMutableArray中,使用请求方法调用内的for循环来完成此操作。问题是我无法在方法调用之外获取数据。 NSLog中的第一个self.items可以显示我想要的数据,其中包含我输入的所有全名。但是,NSLog中的第二个self.items是一个空的NSMutableArray。

在.h文件中:

@property (strong,nonatomic) NSMutableArray *items;


初始化数组:

self.items = [[NSMutableArray alloc] init];


这是我的代码:

- (IBAction)reloadFriendList:(id)sender {

    FBRequest *request = [FBRequest requestForMyFriends];
    [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        NSString *space = @" ";
        for (id<FBGraphUser> user in result[@"data"]) {
            NSArray *array = [[NSMutableArray alloc] initWithObjects:[user first_name], space, [user last_name], nil];
            NSString *fullName = [array componentsJoinedByString:@""];
            [self.items addObject:fullName];
        }
        NSLog(@"%@",self.items);
    }];
    NSLog(@"%@",self.items);
}


有人可以告诉我怎么回事吗?谢谢!

最佳答案

我认为您不完全了解这里发生的事情。当请求完成时,将执行完成处理程序块,而在您调用[request startWithCompletionHander ...]之后立即执行完成处理程序块后的NSLog语句。因此,以下是按时间顺序排列的事件:


您调用[request startWithCompletionHandler ...]
执行块外的NSLog(self.item应该为空,因为请求尚未完成)
一旦请求在某个任意时间完成后,将执行完成处理程序块并填充您的self.items,然后NSLog将打印出所有项目(如果项目实际在响应中,则应为非空)。

关于ios - 无法在startWithCompletionHandler之外检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21636693/

10-11 22:29
查看更多