首页 文章

为什么NSUserDefaults说我'm adding a non-property-list object? It'只是一个带有NSDictionary,NSNumber和NSData的NSArray [重复]

提问于
浏览
0

这个问题在这里已有答案:

NSUserDefaults docs

默认对象必须是属性列表,即(或集合的实例组合)的实例: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 回答

  • 1

    NSUserDafults限制不仅适用于值,也适用于键 . 你的 globalSelf.accountIndexBeingSetup 似乎是一个整数,所以 @(globalSelf.accountIndexBeingSetup) 是一个NSNumber . 尝试使用 [@(globalSelf.accountIndexBeingSetup) description] 作为关键来检查这个猜测 .

相关问题