我刚刚开始为 iOS 平台开发应用程序,并且正在使用 Azure 的 Web 服务访问远程数据库。我一直在表上调用 readWithCompletion: 方法来尝试从服务器读取数据库中的所有数据。
在方法调用的完成 block 中,我已将 items
参数记录到控制台,并且我的数据已成功下载。我尝试过使用 NSMutableArray *stops = [items mutableCopy] 来获取完成 block 之外的数据,但是一旦超出完成 block 的范围,stops 就为零.
我在这里做错了什么?
[self.table readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {
self.stops = [items mutableCopy];
}];
最佳答案
如果该 block 异步运行(这正是您对 Web 请求所期望的),则在该 block 中更改的变量在该 block 执行之前不会更改,这将在请求完成后稍后发生。
这里有一些抽象代码,以及您应该期望的日志结果。假设您有一个 TableView ,其模型是对象数组,并且异步请求从 Web 服务获取这些对象:
@property (weak, nonatomic) IBOutlet *tableview;
@property (strong, nonatomic) NSArray *model;
[webRequest performRequest:^(NSArray *result) {
// this code runs later, when the request completes
self.model = result;
// update our UI to indicate that we fetched some data
[self.tableview reloadData];
}];
// this code runs right away, so self.model is uninitialized at this point
// this is where we should update our UI to say that we are busy fetching data
关于ios - 为什么我不能将属性的值设置为 readWithCompletion 完成 block 的 items 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15316059/