发送到不可变对象的变异方法 - iOS [重复]

Posted

技术标签:

【中文标题】发送到不可变对象的变异方法 - iOS [重复]【英文标题】:Mutating method sent to immutable object - iOS [duplicate] 【发布时间】:2015-02-20 18:02:13 【问题描述】:

我有一个 NSMutableArray,我正在尝试使用 insertObjectAtIndex 方法,但它不起作用。似乎认为我正在尝试使用不可变数组做一些可变的事情.....但我使用的是 NS ..... MUTABLE.... 数组。那么地球可能有什么问题呢??

这是我的代码:

        if ([dataArray count] == 0) 

            // Initialise the audio arrays.
            dataArray = [[NSMutableArray alloc] init];

            // Now add the data to the array.
            [dataArray addObject:@"test 1"];
        

        else 
            [dataArray insertObject:@"test 2" atIndex:0];
        

        NSLog(@"d in: %@", dataArray);

dataArray 在头文件中定义如下:

NSMutableArray *dataArray;

感谢您抽出宝贵时间,丹。

【问题讨论】:

告诉我们你在哪里定义dataArray @vikingosegundo 我已经为你更新了我的答案。 所以基本上你没有发布你的真实代码并期望人们猜出问题所在。 【参考方案1】:

对不起大家,我刚刚发现出了什么问题。我确实对我的问题中的代码进行了一些编辑,但基本上我实际上填充 NSMutableArray 的是一个存储在 NSUserDefault 中的数组(当然它只返回不可变数组)。

所以即使我使用 NSMutableArray 来存储数据,它仍然具有不可变的内容。为了解决这个问题,我最终使用“mutableCopy”ios 方法来获取 NSUserDefaults 数组内容的可变副本。

【讨论】:

以上是关于发送到不可变对象的变异方法 - iOS [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用可变数组函数时,将变异方法发送到不可变对象错误

崩溃:发送到不可变对象的变异方法

使用 NSMutableArray 将变异方法发送到不可变对象

尽管对象是 NSMutableDictionary,但“发送到不可变对象的变异方法”

发送到不可变对象的变异方法

使用 userInfo (null) 发送到不可变对象的变异方法