gpt4 book ai didi

ios - 无法在 startWithCompletionHandler 之外检索数据

转载 作者:行者123 更新时间:2023-11-28 18:34:33 33 4
gpt4 key购买 nike

我将 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);
}

有人能告诉我这是怎么回事吗?谢谢!

最佳答案

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

  1. 您调用 [请求 startWithCompletionHandler...]
  2. block 外的NSLog被执行(self.items应该是空的,因为请求还没有完成)
  3. 一旦请求在之后的某个任意时间完成,完成处理程序 block 将被执行,您的 self.items 将被填充,然后 NSLog 将打印出所有项目(如果项目实际上在响应中,则这些项目应该是非空的)。

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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com