NSUserDefaults - 将数组作为对象插入不起作用

时间:2014-08-28 23:54:57

标签: ios objective-c arrays nsuserdefaults

这是我的代码:

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对象和密钥..

谢谢。

1 个答案:

答案 0 :(得分:3)

NSUserDefaults始终返回不可变对象,即使您设置了可变对象也是如此。如果要更改从默认值返回的内容,则必须制作可变副本。