2

我有我的UITableView数据组织,使表的部分是NSMutableArray的数组元素。每个元素本身是NSMutablearrayNSMutableDictionary,表示每个部分的行和每行的数据。addObject到NSMutableArray中的NSMutableArray

当我创建这个,我加载所有的数据,并创建每个部分的NSMutableArray,然后将它们一次一个地添加到“外部”NSMutableArray。我通过以下参考行:

[[[objData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"name"] 

并且这样做没有问题。我认为这里的优势是我可以拥有可变数量的部分,我需要这些部分,并且每个部分都有可变数量的行,这也是一项要求。

但是,当我尝试向某个节添加行时,会出现错误。

[[objData objectAtIndex:0] addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys: objectID,@"id",nameVar,@"name",nil]]; 

不起作用。这是问题所在,还是与我放置阵列的方式有关?我在想内部的NSMutableArray只分配了太多的内存,但我会认为这个数组只是一个引用数组,不会有这个问题。我可能是错的 - 这不是第一次。

在此先感谢您的包装。

+0

你会得到什么错误?我在想外层数组实际上是一个NSArray,而不是一个NSMutableArray,所以你不能添加一个对象。但是,不,没有记忆问题;你对引用数组是正确的。 – matt

+0

嗨马特,我只是得到“程序接收到的信号:”SIGABRT“。控制台味精:***终止应用程序由于未捕获的异常'NSInternalInconsistencyException',原因:' - [__ NSCFArray insertObject:atIndex:]:mutating方法发送到不可变对象' 你可能会对NSArray的问题,但我看到的一切,似乎都是可变的。 –

+0

是的,我是对的 - 你有一个不可变的NSArray,你试图添加一个你不能这样做 - 记住,你可以调用你的对象任何你喜欢的东西,但是对象有自己的天生类型 - 重要的不是你如何输入或描述它,而是它的内在本质,内在的 – matt

回答

1

你是如何初始化数组及其内部的值?我认为你有一个不可变的数组。

另外一个NSMutableArray具有可变大小,调用initWithSize是完全不必要的。如果需要的话,数组将会调整大小。

+0

在这个视图中,我使用 加载了来自NSDefaults的objData self.objData = [defau lts mutableArrayValueForKey:kObjDataDefaultKey]; 它被创建并保存在另一个视图中。 我不确定您对initWithSize评论的意思。 –

+0

沿着这些线进一步搜索 - 看起来NSDefaults出来的东西变得不可变。我将不得不寻找替代品或解决方法。谢谢! –

+0

对此使用[[NSMutableARray alloc] initWithArray。 –

相关问题