为什么我的对象添加到NSMutableArray不起作用?

时间:2013-03-23 20:45:52

标签: ios objective-c xcode ios6 grand-central-dispatch

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
            NSError *error = nil;

            NSURL *urlRequest = [NSURL URLWithString:[NSString stringWithFormat:@"...", URL]];
            NSString *json = [NSString stringWithContentsOfURL:urlRequest
                                        encoding:NSASCIIStringEncoding
                                        error:&error];

            JKParseOptionFlags options = JKParseOptionStrict;
            NSDictionary *results = [json objectFromJSONStringWithParseOptions:options];

            NSString *body = [[results objectForKey:@"item"] objectForKey:@"description"];

            Article *article = [[Article alloc] initWithTitle:title URL:URL body:body];
            [self.articles insertObject:article atIndex:0];
        });

除此之外我有[self.tableView reloadData];但是如果我之后立即调用NSLog(@"%d", self.articles.count);它会返回0.为什么不添加它?如果我在该块中调用NSLog访问文章的body属性,它将打印它,因此该对象看起来很好。是的,它的方法被调用(通过viewDidLoad)。

2 个答案:

答案 0 :(得分:3)

正文异步执行,因此在函数完成一段时间后才会开始运行该正文。所以你要做的就是在队列上放置一些代码(直到以后才会运行),并检查文章是否已添加到列表中(直到后来才会添加)。

如果您检查代码内部,那实际上是稍后检查,当队列完成运行代码时......

答案 1 :(得分:0)

如果没有看到articles对象的声明,我无法告诉你更多信息,但这通常意味着您尝试使用的NSMutableArray对象为零。在您记录文章的body属性的同时,尝试记录articles对象。如果您将数组声明为

NSMutableArray *articles;

然后它将无法工作 - 文章仍然是零,不能接受对象。使用以下选项之一声明/实例化:

NSMutableArray *articles = [NSMutableArray array];

NSMutableArray *articles = [[NSMutableArray alloc] init];