0

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

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

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

我当然会很感激我能得到的任何帮助!谢谢。

4

1 回答 1

1

嗯,很清楚:mutating method sent to immutable object
这意味着你有一个不可变NSArray.

尽管它被定义为NSMutableArray,但这并不意味着它真的是一个。它仅在尝试调用变异方法(如-addObjectsFromArray:.

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

self.arrayOfNewsItems = [[[NSMutableArray alloc] init] autorelease];
于 2012-04-18T19:00:31.063 回答