这个问题在这里已有答案:
默认对象必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary . 如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例 .
我的代码:
NSData *provisionData = [NSData dataWithBytes:&provisionStruct length:sizeof(provisionStruct)];
NSDictionary *accountIndexToProvisionPairing = @{@(globalSelf.accountIndexBeingSetup): provisionData};
NSMutableArray *newProvisionedDevices = [[[NSUserDefaults standardUserDefaults] objectForKey:@"ProvisionedDevices"] mutableCopy];
[newProvisionedDevices addObject:accountIndexToProvisionPairing];
[[NSUserDefaults standardUserDefaults] setObject:newProvisionedDevices forKey:@"ProvisionedDevices"];
但是每次运行它都会得到这个:
尝试设置非属性列表对象({0 = <8b48ea2d b326da4b 82311275 d7f81960 6f481b01 b4d5146e 5bfc58e3 3d85e98d>;}
我在做什么涉及非属性列表对象?它只是NSArray的NSArray,持有NSNumber和NSData . 一律均按上款规定有效 .
1 回答
NSUserDafults限制不仅适用于值,也适用于键 . 你的
globalSelf.accountIndexBeingSetup
似乎是一个整数,所以@(globalSelf.accountIndexBeingSetup)
是一个NSNumber . 尝试使用[@(globalSelf.accountIndexBeingSetup) description]
作为关键来检查这个猜测 .