ios - 为什么我不能将属性的值设置为 readWithCompletion 完成 block 的 items 参数?

标签 ios azure objective-c-blocks azure-sql-database azure-mobile-services

我刚刚开始为 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/

相关文章:

ios - xcode 'boost/config/user.hpp' 找不到文件

objective-c - Objective-C库中用于回调的选择器或 block

ios - 您是否注意到 dispatch_after 在 iOS 设备上运行速度太慢了 ~10%?

ios - NSTimer Category + Blocks 替换选择器的实现

ios - Erica Saduns iPhone Developers Cookbook (3.0) 第 8 章,练习 14 — 调整大小和旋转

ios - 在 Swift 中单击添加和删除按钮时如何在 View 上添加和删除文本字段?

objective-c - 在 cocos2d 中使用 CCMenu

azure - 如何让 Azure Active Directory B2C 与 Bot Framework 配合使用?

azure - Azure 媒体服务的托管服务标识 (MSI)

mysql - 如何连接到在azure中的linux虚拟机上运行的mysql服务器