NSUserDefaults返回NSArray而不是NSDictionary。显然是从iOS 9.0开始

时间:2015-10-19 20:15:37

标签: ios objective-c

在我的应用程序的登录过程中,我循环访问服务器响应并在NSUserDefaults中保存一些数据:

NSMutableArray *unitTypeArray = [[NSMutableArray alloc] init];

[unitTypeArray addObject:@{@"Name":@"Item",
                                   @"Description":@"Item",
                                   @"ID":@"0",
                                   @"Time":@"2014-12-29 12:00:00",
                                   @"AddedByUserID":@"2",
                                   @"Depth":@"0",
                                   @"Height":@"0",
                                   @"Width":@"0",
                                   @"softLimit":@"10"}];

for (NSMutableDictionary *unitType in response) {
    [unitType setValue:@10 forKey:@"softLimit"];
    [unitTypeArray addObject:unitType];
}

[[NSUserDefaults standardUserDefaults] setObject:unitTypeArray forKey:@"unitTypes"];

后来我正在检索这个数组:

self.unitTypeArr = [[self.preferences objectForKey:@"unitTypes"] mutableCopy];

但是我得到了一个N​​SDictionary。这完全适用于iOS< 9.0但是从iOS 9.0开始我的应用程序崩溃了。有没有解决方法,还是我必须将NSDictionary转换为NSArray?

2 个答案:

答案 0 :(得分:1)

您将 unitTypeArray 保存到 NSUserDefault 。对?因为它的类型是 NSMutableArray ;因此,您将从首选项获得数组。为什么你期待 NSDictionary

通过这种方式检索数据

NSMutableArray *unitTypeArr = [[NSUserDefaults standardUserDefaults] objectForKey:@"unitTypes"];

答案 1 :(得分:0)

我找到了一种方法来实现它。我的问题中的第一个代码块仅在之前未检索到数据的情况下运行。我无法理解为什么,但如果我每次登录都会运行它,它就可以了。即使它包含完全相同的数据。