在有人说过这个问题以前被多次提出之前,我已经完成了大约20个不同的答案,并尝试了我发现的一切。尽管如此,我只在大约5天前启动了目标c,所以可能有一些非常简单的解决方案。
NSUserDefaults似乎没有从默认属性列表加载数组,尽管以多种不同的方式调用它。在继续之前,这是我读取数组的代码:
fishArrayMutable = [[NSMutableArray alloc] initWithArray:(NSArray*)[defaults objectForKey:@"fishArray"] copyItems:TRUE];
if (fishArrayMutable == nil)
{
fishArrayMutable = [[NSMutableArray alloc] init];
UIAlertView *alert = [[UIAlertView alloc] init];
[alert setTitle:@"fishArray = nil"];
[alert addButtonWithTitle:@"Ok"];
[alert show];
[alert release];
}
这是我编写数组的代码:
[defaults setObject:fishArrayMutable forKey:@"fishArray"];
[defaults synchronize];
现在开始成为一个非常令人沮丧的问题,我已经找到了解决问题的方法,并在阅读部分得出结论。 Mutable数组在头文件中声明。请帮忙,这已经困扰了我大约6个小时了......
答案 0 :(得分:3)
我怀疑错误是以下之一:
defaults
未初始化。打破每一步,在每一步之前和之后编写测试。
1)NSLog
fishArrayMutable
编写它以验证数组内容
2)在将fishArrayMutable
写入默认值NSLog
之后立即用户默认设置。
例如:
NSLog(@"Before writing fishArray: %@", fishArrayMutable);
[defaults setObject:fishArrayMutable forKey:@"fishArray"];
NSLog(@"After writing fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]);
请注意,NSLog
语句不使用defaults
保持自包含。{/ p>
将类似的NSLog
语句括在读取中(并将读取的两个语句包含在内):
NSLog(@"Before reading fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]);
NSArray *fishArray = [defaults objectForKey:@"fishArray"];
NSLog(@"After reading fishArray: %@", fishArray);
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
NSLog(@"After creating fishArrayMutable: %@", fishArrayMutable);
然后问题应该是显而易见的。
注意:由于NSUserDefaults
而不是因为数组项目本身是不可变的:
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
你应该能够使用mutableCopy
:
fishArrayMutable = [fishArray mutableCopy];
答案 1 :(得分:1)
尝试使用mutableArrayValueForKey
检查此link
像这样使用:
fishArrayMutable = [[NSMutableArray alloc] initWithArray:[defaults mutableArrayValueForKey:@"fishArray"]];
它对我有用
修改强>:
写作:
[defaults setObject:fishArrayMutable forKey:@"fishArray"];
[defaults synchronize];
负载:
NSMutableArray *array = [defaults mutableArrayValueForKey:@"fishArray"];