这是我的代码:
NSMutableDictionary *newThoughtDict = [[NSMutableDictionary alloc] init];
[newThoughtDict setObject:self.triggerOne.text forKey:@"thought"];
[newThoughtDict setObject:self.date forKey:@"date"];
NSDate *currentDate = [[NSDate alloc] initWithTimeIntervalSince1970:NSTimeIntervalSince1970];
[newThoughtDict setObject:currentDate forKey:@"date"];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *arrayData = [currentDefaults objectForKey:@"thoughtArray"];
if (arrayData != nil)
{
NSMutableArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData];
[savedArray insertObject:newThoughtDict atIndex:0]; //<---error being thrown here
[currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:savedArray] forKey:@"thoughtArray"];
[currentDefaults synchronize];
抛出的错误是: - [__ NSArrayI insertObject:atIndex:]:无法识别的选择器发送到实例0x170200150
似乎问题是当我在数组中插入字典时,但是执行该操作的代码是正确的,所以我想知道如何从NSUserDefaults检索数组时出现问题。
此外,当我测试应用程序时,它应返回“nil”,因为我还没有真正创建NSUserDefault对象和密钥..
谢谢。
答案 0 :(得分:3)
NSUserDefaults始终返回不可变对象,即使您设置了可变对象也是如此。如果要更改从默认值返回的内容,则必须制作可变副本。