0

我遇到了一个奇怪的问题NSArray。该应用程序需要在具有不同输入的两个场景中访问相同的 Web 服务。一种是初始状态,来自服务器的响应NSUserDefaultsNSKeyedArchiver. 接下来是在完成特定操作时,然后根据响应NSUserDefaults修改存储的值。

NSArray *sorted = [ActiveOrder arrayOfModelsFromDictionaries: [responseObject objectForKey:@"GetActiveOrdersResult"]]; //ActiveOrder is a custom JSON model object
NSSortDescriptor *orderCreateDate = [[NSSortDescriptor alloc] initWithKey:@"orderCreateDate" ascending:YES];
ordersList = [[NSMutableArray alloc] initWithArray: [sorted sortedArrayUsingDescriptors: [NSArray arrayWithObjects:orderCreateDate, nil]]];

NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:ordersList.count];
for (ActiveOrder *itemDetail in ordersList) {
    [archiveArray addObject:itemDetail];
} //if i log 'archiveArray' it prints valid value (array of 'ActiveOrder' objects)

NSData *itemDetailObject = [NSKeyedArchiver archivedDataWithRootObject:archiveArray];
[[NSUserDefaults standardUserDefaults] setObject:itemDetailObject
                 forKey:TAG_ACTIVE_ORDERS_RESPONSE];

当我尝试取消归档之前存储的数据时,它会打印@“6 个对象”而不是 6 个 ActiveOrder 对象。

NSMutableArray *itemsFromLastResult = [[NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: TAG_ACTIVE_ORDERS_RESPONSE]] mutableCopy];

我正在使用上面的行来访问存储的值以进行修改。我很困惑为什么它打印@“6 个对象”而不是实际对象。而且它随机崩溃(猜测这可能是原因)。有什么我做错了NSKeyedArchiver/NSKeyedUnarchiver

很高兴知道解决方案。谢谢!

4

1 回答 1

0

NSUserDefaults 异步保存对象!尝试 [[NSUserDefaults standardUserDefaults] 同步]; 在 setObjectForKey 之后

于 2015-05-13T12:47:49.520 回答