Ios NSUserDefaults setObject:forKey:尝试插入非属性列表对象
我想我在这里做了一些非常明显的错误,但我不明白!我正试图在iOS 7.1上将包含NSString、NSNumber和NSBooleans的NSMutableDictionary保存到NSUserDefaults中 以下是字典的定义:Ios NSUserDefaults setObject:forKey:尝试插入非属性列表对象,ios,objective-c,dictionary,nsuserdefaults,Ios,Objective C,Dictionary,Nsuserdefaults,我想我在这里做了一些非常明显的错误,但我不明白!我正试图在iOS 7.1上将包含NSString、NSNumber和NSBooleans的NSMutableDictionary保存到NSUserDefaults中 以下是字典的定义: - (NSMutableDictionary *)hotLevelsDict { if ( (!_hotLevelsDict) || ([_hotLevelsDict count] < 1) ) { _hotLevelsDict
- (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;
}
我试着打印字典中所有子对象的类,它们都是标准的,而且我对另一个以非常相似的方式构造的字典也做了同样的事情,效果很好
有人能指出我的错误吗
谢谢 在plist中,键必须是字符串。由于NSUserDefaults由plist支持,因此它强制执行该限制
作为旁注,我认为使用
[{…}mutableCopy]
nsserdefault
只支持NSString
,NSNumber
,NSDate
,NSArray
,NSDictionary
,BOOL
,NSInteger
,NSFloat
和其他基本数据类型
如果这些收集类型包含其他非系统数据类型,它们仍然可能导致崩溃。如果包含自定义数据类型,则需要转换为
NSData
存储 啊,太棒了!谢谢还有一个关于mutableCopy的好提示谢谢:)我也面临同样的问题。您能否澄清一下,是否可以使用NSUserDefaults将字典作为对象保存到字符串键?@TechSavy是的,您可以将字典作为值,但该字典中的每个键也必须是字符串。@Kevin。。基本上,字典中的每个键都必须有一个非NSNull类的值。任何类型的值都可以满足我的猜测?@techsavy否,请参阅允许的类型。基本上,每个键都必须是NSString,值只能是NSString、NSNumber、NSDate、NSData或NSArray或NSDictionary,其中的所有对象都必须遵循相同的规则。
[defaults setObject:self.hotLevelsDict forKey:@"hotLevelsDict"];