我想我在这里做了一些非常明显的错误,但我想不通!我正在尝试将包含NSString、NSNumbers和NSBoolean的NSMutableDictionary保存到iOS 7.1上的NSUserDefaults中。
以下是字典定义:
- (NSMutableDictionary *)hotLevelsDict
{
if ( (!_hotLevelsDict) || ([_hotLevelsDict count] < 1) )
{
_hotLevelsDict = [NSMutableDictionary dictionaryWithDictionary:
@{@100: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @50, @"complete": @NO}],
@200: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @100, @"complete": @NO}],
@500: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @200, @"complete": @NO}],
@1000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @200, @"complete": @NO}],
@2000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @500, @"complete": @NO}],
@5000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@10000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@20000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @10, @"points": @1000, @"complete": @NO}],
@50000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@100000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@200000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@300000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@400000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@500000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@600000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@700000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@800000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @20, @"points": @1000, @"complete": @NO}],
@900000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @5, @"points": @50000, @"complete": @NO}],
@950000: [NSMutableDictionary dictionaryWithDictionary:@{@"time": @2, @"points": @50000, @"complete": @NO}]
}];
}
return _hotLevelsDict;
}
保存它:
[defaults setObject:self.hotLevelsDict forKey:@"hotLevelsDict"];
我已经尝试打印字典中所有子对象的类,它们都是标准的,而且我正在对以非常相似的方式构建的另一个字典做同样的事情,它工作得很好。
有人能指出我的错误吗?
谢谢!
顺便说一下,我认为使用[@{...} mutableCopy]
会更清楚。
NSUserDefault
仅支持NSString
、NSNumber
、NSDate
、NSArray
、NSDictionary
、BOOL
、NSInteger
、NSFloat
等基础数据类型。
如果这些集合类型包含其他非系统数据类型,它们仍然可能导致崩溃。如果包含自定义数据类型,则需要转换为NSData
存储。这是我的测试演示