1

我刚刚开始为 iOS 平台开发应用程序,并且正在使用 Azure 的 Web 服务来访问远程数据库。我一直在调用readWithCompletion:表上的方法来尝试从服务器读取数据库中的所有数据。

在方法调用的完成块中,我已将items参数记录到控制台,并且我的数据已成功下降。我已经尝试过这样做NSMutableArray *stops = [items mutableCopy]以使我的数据超出完成块的范围,但是stops一旦超出了完成块的范围,它就为零。

我在这里做错了什么?

[self.table readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {
    self.stops = [items mutableCopy];
}];
4

1 回答 1

2

如果块是异步运行的,这是您对 Web 请求的期望,那么块中更改的变量在块执行之前不会更改,这将在请求完成后发生。

这是一些抽象代码,以及您应该期望的日志结果。假设您有一个表视图,其模型是对象数组,并且假设异步请求从 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
于 2013-03-09T22:23:05.357 回答