为什么我的对象添加到NSMutableArray不起作用?
问题描述:
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.为什么不添加它?如果我在访问文章的body属性的块中调用一个NSLog,它将打印它,所以看起来对象创建的很好。是的,这个方法不会被调用(通过viewDidLoad)。为什么我的对象添加到NSMutableArray不起作用?
答
身体得到异步执行的,所以直到你的函数后一定时间内完成它没有开始运行该机构。所以你所做的只是把一些代码放到一个队列中(直到后面才会运行),然后检查文章是否被添加到列表中(直到后面才会添加)。
如果检查里面的代码,这实际上是后来检查时,当队列完成运行代码...
答
我不能告诉你更多没有看到你的articles
对象的声明,但这通常意味着你试图使用的NSMutableArray
对象为零。在记录文章的主体属性的同时,尝试记录articles
对象。如果你宣布你的阵列为
NSMutableArray *articles;
然后它不会工作 - 文章仍然是零,不能接受对象。声明使用下列选项之一/实例化:
NSMutableArray *articles = [NSMutableArray array];
或
NSMutableArray *articles = [[NSMutableArray alloc] init];
当* I *为此,它通常意味着我并没有实际分配一个NSMutableArray对于self.articles和我目前所有的对象是一个零指针。 – 2013-03-23 20:48:52