为什么我的对象添加到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不起作用?

+0

当* I *为此,它通常意味着我并没有实际分配一个NSMutableArray对于self.articles和我目前所有的对象是一个零指针。 – 2013-03-23 20:48:52

身体得到异步执行的,所以直到你的函数后一定时间内完成它没有开始运行该机构。所以你所做的只是把一些代码放到一个队列中(直到后面才会运行),然后检查文章是否被添加到列表中(直到后面才会添加)。

如果检查里面的代码,这实际上是后来检查时,当队列完成运行代码...

我不能告诉你更多没有看到你的articles对象的声明,但这通常意味着你试图使用的NSMutableArray对象为零。在记录文章的主体属性的同时,尝试记录articles对象。如果你宣布你的阵列为

NSMutableArray *articles; 

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

NSMutableArray *articles = [NSMutableArray array]; 

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