不可变的NSMutableArray

时间:2012-06-21 14:46:07

标签: ios uitableview nsmutablearray

在我的viewDidLoad上,我从网络服务加载数组的前5项并将它们放在我的NSMutableArray上。此外,在此视图中,我UITableViewController显示我的NSMutableArray项目以及来自网络服务的内容。当我滚动到UITableView的最后一项时,我正在从webservice加载5个下一个项目并将它们添加到我的NSMutableArray并重新加载表格数据以显示所有10个项目。

问题在于,当我尝试向现有NSMutableArray添加来自网络服务的5个新对象时,程序崩溃并显示以下消息:Exception: -[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object

我访问NSMutableArray中的cellForRowAtIndexPath:的方式如下:

cell.textLabel.text = [[self.myMutableArray objectAtIndex:indexPath.row]objectForKey:@"name"];

关于它可能是什么的任何想法?

1 个答案:

答案 0 :(得分:3)

首先,在编译器输出中查找警告。您可能正在为NSArray变量分配NSMutableArray。这通常会产生警告。你的构建应该没有警告。这对ObjC代码至关重要(很多事情你会想到“错误”只是ObjC中的警告)。如果你忽略了警告,那么你会遇到很多问题。

如果某些内容投放到id,您可以在不创建警告的情况下出现这种情况。例如,如果您从数组或字典中获取“NSMutableArray”(实际上是NSArray),则不会收到有关类型不匹配的警告。寻找这些情况。基本上,审核您指定的每个点myMutableArray,并确保您实际上正在分配一个可变数组。