真实设备上的NSDictionary错误

时间:2014-04-10 12:50:14

标签: objective-c cocoa-touch cocoa nsdictionary

以下代码在模拟器上正常工作,但在真实设备上我有例外:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"] == nil)
{
    NSMutableDictionary *favorites = [[NSMutableDictionary alloc] init];
    [[NSUserDefaults standardUserDefaults] setObject:favorites forKey:@"favorites"];
}

下一行代码的例外:

NSMutableDictionary *favorites = [NSMutableDictionary dictionaryWithDictionary:
    [[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"]];

这里有调试器消息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'*** -[NSDictionary initWithDictionary:copyItems:]: dictionary argument is not
an NSDictionary'

我在iOS 7.1上使用iPad设备。

修改

在真正的设计中,旧版本的应用程序在NSUserDefaults中为NSArray使用了此密钥。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

看起来已经存储在用户首选项中的内容不是字典。

您可以在开头更改测试,如下所示:

if (! [[[NSUserDefaults standardUserDefaults] objectForKey:@"favourites"] 
           isKindOfClass:[NSDictionary class]])

这将涵盖用户默认值中没有任何内容,或者您​​有一个不是字典的对象的情况。