ios - 数组已填充,但括号外为空?

标签 ios objective-c arrays

当我在下面记录我的数组 self.userData 时,数组被填充。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableDictionary *viewParams = [NSMutableDictionary new];
    [viewParams setValue:@"u000" forKey:@"view_name"];
    [DIOSView viewGet:viewParams success:^(AFHTTPRequestOperation *operation, id responseObject) {
        self.userData = [responseObject mutableCopy];

  NSLog(@"userData = %@", self.userData);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Failure: %@", [error localizedDescription]);
    }];

但是,当我尝试获取填充数据并在这些括号之外(例如下面)使用它时,数组是空的?我该如何解决这个问题?

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableDictionary *viewParams = [NSMutableDictionary new];
    [viewParams setValue:@"u000" forKey:@"view_name"];
    [DIOSView viewGet:viewParams success:^(AFHTTPRequestOperation *operation, id responseObject) {
        self.userData = [responseObject mutableCopy];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Failure: %@", [error localizedDescription]);
    }];

    self.userBio.text = self.userData[0][@"userbio"];

    NSLog(@"userData = %@", self.userData);

最佳答案

您误解了 AFHTTPRequestOperation 等异步方法的工作原理。重点是这种方法会在请求发送到远程服务器之前立即返回。

任务完成后,它会调用您的完成 block 。一旦数据可用,您想做的任何工作都应该在您的完成 block 中。

我不记得 AFNetworking 的完成方法是在主线程上运行还是在后台线程上运行。查阅他们的文档。如果完成 block 是从后台运行的,那么您需要将 UI 更改放在对 dispatch_async(dispatch_get_main_queue()) 的调用中。

编辑:

看看文档,您使用的 AFHTTPRequestOperation 类似乎默认调用主队列上的完成 block ,除非您通过设置 successCallbackQueue 指定不同的队列 属性。

因此,除非您设置了 successCallbackQueue,否则您无需担心在对 dispatch_async() 的调用中包含 UI 操作。

关于ios - 数组已填充,但括号外为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335070/

相关文章:

objective-c - 从数组和数据库中删除行

ios - 我的应用程序的恢复时间很长

arrays - 从数组中提取一定数量的 block

arrays - 将Struct数组元素作为参数传递给Go语言中的函数

php - 遍历php多级关联数组

ios - Xcode iPhone SDK - 上传文件

ios - UITableView subview 中的辅助功能丢失

iphone - 使用 [NSThread sleepForTimeInterval :2. 0] 时可以停止或取消循环功能吗?在 IOS 中

ios - 如何使您的应用程序在 UIActivityViewcontroller 列出的事件中可用

ios - Swift 中的 CATransform3DMakeRotation anchor 和位置