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)。
答案 0 :(得分:3)
正文异步执行,因此在函数完成一段时间后才会开始运行该正文。所以你要做的就是在队列上放置一些代码(直到以后才会运行),并检查文章是否已添加到列表中(直到后来才会添加)。
如果您检查代码内部,那实际上是稍后检查,当队列完成运行代码时......
答案 1 :(得分:0)
如果没有看到articles
对象的声明,我无法告诉你更多信息,但这通常意味着您尝试使用的NSMutableArray
对象为零。在您记录文章的body属性的同时,尝试记录articles
对象。如果您将数组声明为
NSMutableArray *articles;
然后它将无法工作 - 文章仍然是零,不能接受对象。使用以下选项之一声明/实例化:
NSMutableArray *articles = [NSMutableArray array];
或
NSMutableArray *articles = [[NSMutableArray alloc] init];