密钥的值是零。为什么?

时间:2012-04-22 06:01:25

标签: iphone objective-c ios nsuserdefaults key-value

早上好,我制作了一个IBAction方法,将一些对象保存到数组中:

-(IBAction)saveToFav:(id)sender
{
    NSUserDefaults *newDefaults = [NSUserDefaults standardUserDefaults];
    favorites = [[NSMutableArray alloc]initWithArray:[newDefaults mutableArrayValueForKey:@"favorites"] copyItems:YES];

    // check if array already contains an object

    if (![favorites containsObject:self.title])
    {
        [favorites addObject:self.title];
    }
    [newDefaults setObject:favorites forKey:@"favorites"];
}

然而,当我调用此方法应用程序崩溃时出现错误:

  

[NSKeyValueSlowMutableArray getObjects:range:]:key的值   对象0x8939030的最爱是nil'

为什么会这样? 谢谢!

最高

4 个答案:

答案 0 :(得分:2)

您的数据(收藏夹)似乎尚未写入您的默认设置。您可以通过运行此方法强制保存默认值:

[[NSUserDefaults standardUserDefaults] synchronize];

答案 1 :(得分:1)

对于关键的“收藏夹”,newDefaults为零。

答案 2 :(得分:1)

在这一行

favorites = [[NSMutableArray alloc]initWithArray:[newDefaults mutableArrayValueForKey:@"favorites"] copyItems:YES];

nil正被分配到favorites。原因是newDefaults只是建立在前一行上并且是空的。

答案 3 :(得分:1)

当您的应用完成加载时,请添加以下内容:

NSMutableArray *array = [[NSMutableArray alloc]init]; 
[defaults setObject:array forKey:@"favorites"]; 
[defaults synchronize];