NSMutableArray removeAllObjects导致崩溃

con*_*fin 2 exception nsmutablearray ios ios6

我有一个NSMutableArrayViewController我的UITableView定义的数据源,如下所示:

NSMutableArray *messageArray;
Run Code Online (Sandbox Code Playgroud)

我有一个方法来重新加载tableView数据,在此之前,我想清除现有的表数据.

如果我使用以下代码:

  [messageArray removeAllObjects];    
  [self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

2013-02-12 14:20:30.378 appname [20998:907] *由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFArray removeObjectAtIndex:]:发送到immutable对象的mutating方法'* First throw call stack: (0x3939e3e7 0x35dd6963 0x3939e307 0x393200e7 0x392eb5e5 0x7cda3 0x3a236047 0x3a2360d1 0x3a236047 0x3a235ffb 0x3a235fd5 0x3a23588b 0x3a235d79 0x3a15e5c9 0x3a14b8b1 0x3a14b1bf 0x336305f7 0x33630227 0x393733e7 0x3937338b 0x3937220f 0x392e523d 0x392e50c9 0x3362f33b 0x3a19f291 0x79c11 0x39be4b20)的libc ++ abi.dylib:终止称为抛出异常

但是,如果我使用以下代码,它的工作原理.

  NSMutableArray *emptyArray = [NSMutableArray new];
  messageArray = emptyArray;    
  [self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

为什么我收到错误removeAllObjects?这可能是罪魁祸首吗?

    NSMutableDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil];
    messageArray = responseDictionary[@"data"];
Run Code Online (Sandbox Code Playgroud)

Nik*_*uhe 5

这可能是罪魁祸首吗?

NSMutableDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil];
messageArray = responseDictionary[@"data"];
Run Code Online (Sandbox Code Playgroud)

是的,您想要使用可变容器的选项:

NSMutableDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options: NSJSONReadingMutableContainers error:NULL];
Run Code Online (Sandbox Code Playgroud)