objective-c - 真实设备上的 NSDictionary 错误

标签 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 设备。

编辑

在实际设备中,旧版本的应用程序在 NSArray 的 NSUserDefaults 中使用此键。感谢您的帮助!

最佳答案

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

您可以像这样在开始时更改测试:

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

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

关于objective-c - 真实设备上的 NSDictionary 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22988584/

相关文章:

ios - 插入数据库在 iOS 中不起作用?

iphone - 在 iOS6-7 中当设备处于横向或反之时推送纵向 View

iphone - UINavigationBar 两个圆角

ios - 如何在 UICollectionViewCell 上显示标准复选标记?

xcode - Apple 沙盒和 AXUIElementRefs

ios - 从 UTC-5 时区日期和时间 iPhone 应用程序获取当前 iPhone 设备时区日期和时间?

ios - 使用 CAGradientLayer 类更改 UiView IOS 的渐变背景层颜色

ios - swift框架中使用modulemap桥接OC,project中报缺少所需模块

cocoa - 如何使在单独进程中运行的 UI 看起来在我的进程中?

objective-c - nstableview 重新加载不起作用