gpt4 book ai didi

iphone - NSMutableArrays 的 NSMutableArray。发送到不可变对象(immutable对象)的变异方法

转载 作者:可可西里 更新时间:2023-11-01 03:23:46 24 4
gpt4 key购买 nike

我有 NSMutableArraysNSMutableArrays:

 NSMutableArray *array = [[NSMutableArray alloc]init];

for (int i = 0; i < 5; i++)
{
NSMutableArray *miniArray = [[NSMutableArray alloc]init];

for (int k = 0; k < 30; k++)
{
[miniArray addObject:@"0"];
}
[array addObject:miniArray];
}

然后,当我尝试这样做时:

 [[array objectAtIndex:packIndex]replaceObjectAtIndex:index withObject:@"1"];

它崩溃了:[__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object'

为什么?怎么修 ?谢谢!

更新:我将这个数组保存在 NSUserDefaults 中:

[defaults setObject:array forKey:@"mainArray"];

然后,我在另一个类上看了:

array = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"mainArray"]];

另外,我必须提一下,有时代码运行良好,它会将“0”更改为“1”。但它有时也会崩溃。所以我看不到逻辑,为什么它工作正常或者为什么有时会崩溃。

最佳答案

问题是当你从 NSUserDefaults 中读取数组时,迷你数组不会自动成为 NSMutableArrays。

试试这个:

array = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"mainArray"]];
for(int i = 0; i < array.count; i++) {
NSArray * tempArray = array[i];
array[i] = [tempArray mutableCopy];
}

编辑:Best Coder 的回答解释了为什么会这样。存储在 NSUserDefaults 中的对象存储为不可变版本,基本上 NSUserDefaults 是一个 plist 并且没有标志将数组标记为可变/不可变,因此当您读回它们时,它们被假定为不可变。

关于iphone - NSMutableArrays 的 NSMutableArray。发送到不可变对象(immutable对象)的变异方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com