我正在尝试使用addObjectsFromArray将两个数组“连接”(可以这么说)。以下是代码概述:
NSArray *fixed = [NSArray arrayWithArray:timeline2];
NSLog(@"Made the temp successfully.Contents: %@", fixed);
[arrayOfNewsItems addObjectsFromArray:fixed];
Log语句可以确认“fixed”和“timeline2”数组中有有效数据,并且在程序的早期,我确认数据存在于“arrayOfNewsItems”数组中。
尝试addObjects后我收到的异常是这样的:
'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
arrayOfNewsItems是一个NSMutableArray。这是一个属性。实际上,它是这样声明的:
@property (nonatomic) NSMutableArray * arrayOfNewsItems;
也许这是“非原子”声明?我也不完全理解这些。
我唯一能想到的是每个数组中的数组元素具有不同的对象类型 - 或者更确切地说,尽管它们是字典对象的每个数组,但对象本身由不同的键/值对列表组成。例如:
数组元素1可能包含:
(key) (value)
name Joe
title Mr.
数组元素2可能包含:
(key) (value)
phone 555-1263
shoeSize 2
现在,在任何其他语言中,我都不会尝试这个,但我很确定我在之前的帖子中被告知可以这样做。我知道objective-c将它们存储为(id),我们可以像这样将所有内容混合在一起。所以,问题是:
在开始编写函数以使最终数组的所有字段名称相同之前,我会得到一个可靠的答案。
我一定会感谢我能得到的任何和所有帮助!感谢。
答案 0 :(得分:1)
嗯,很清楚:mutating method sent to immutable object
这意味着您拥有NSArray
的不可变实例。
即使它被定义为NSMutableArray
,但并不意味着它确实是一个。它只在尝试调用-addObjectsFromArray:
等变异方法时删除警告。
您必须确保在创建阵列时,将alloc / init发送到可变版本:
self.arrayOfNewsItems = [[[NSMutableArray alloc] init] autorelease];