addObjectsFromArray返回错误

时间:2012-04-18 18:56:58

标签: objective-c arrays

我正在尝试使用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),我们可以像这样将所有内容混合在一起。所以,问题是:

  • 这是真的吗?
  • 如果是的话,我错过了什么?

在开始编写函数以使最终数组的所有字段名称相同之前,我会得到一个可靠的答案。

我一定会感谢我能得到的任何和所有帮助!感谢。

1 个答案:

答案 0 :(得分:1)

嗯,很清楚:mutating method sent to immutable object
这意味着您拥有NSArray不可变实例。

即使它被定义为NSMutableArray,但并不意味着它确实是一个。它只在尝试调用-addObjectsFromArray:等变异方法时删除警告。

您必须确保在创建阵列时,将alloc / init发送到可变版本:

self.arrayOfNewsItems = [[[NSMutableArray alloc] init] autorelease];