Ios 为什么说我';是否正在添加非属性列表对象?它';这只是一个NSArray,有NSDictionary、NSNumber和NSData

Ios 为什么说我';是否正在添加非属性列表对象?它';这只是一个NSArray,有NSDictionary、NSNumber和NSData,ios,objective-c,cocoa-touch,nsuserdefaults,nsdata,Ios,Objective C,Cocoa Touch,Nsuserdefaults,Nsdata,: 默认对象必须是属性列表,即NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary的实例(或集合实例的组合)。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例 我的代码: NSData *provisionData = [NSData dataWithBytes:&provisionStruct length:sizeof(provisionStruct)]; NSDictionary

:

默认对象必须是属性列表,即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 = ; }


我在做什么,这涉及到一个非属性列表对象?它只是一个NSDictionary数组,包含一个NSNumber和NSData。根据上面的段落,所有这些都是有效的。

NSUserDaFulls限制不仅适用于值,而且也适用于键。您的
globalSelf.accountIndexBeingSetup
似乎是一个整数,所以e> @(globalSelf.accountIndexBeingSetup)是一个NSNumber。请尝试使用
[@(globalSelf.accountIndexBeingSetup)说明]
作为一个键来检查这个猜测。

会有意义…不能使用NSNumber作为键?疯狂。你说我们不能使用NSNumber作为键是什么意思?它不也是一个属性列表吗?我想知道,因为我有一个nsmutabledictionary os nsarrays的nsstring,当我试图将其存储在UserDefault中时,它会崩溃,字典中的NSNumber作为keysNever将
description
的值用于类似的内容。它的输出未记录,可能有一天会更改。例如,
NSDate
不久前发生了这种情况。10.8/iOS6中的NSURL也发生了这种情况