0

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

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

我访问NSMutableArrayin 的方式cellForRowAtIndexPath:是这样的:

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

知道它可能是什么吗?

4

1 回答 1

3

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

如果将某些内容强制转换为id. 例如,如果您从数组或字典中获取“ NSMutableArray”(实际上是一个),您将不会收到有关类型不匹配的警告。NSArray寻找这些情况。基本上,审核您分配的每个点,myMutableArray并确保您实际上分配了一个可变数组。

于 2012-06-21T14:52:48.000 回答