我遇到了一个奇怪的问题NSArray
。该应用程序需要在具有不同输入的两个场景中访问相同的 Web 服务。一种是初始状态,来自服务器的响应NSUserDefaults
在NSKeyedArchiver
. 接下来是在完成特定操作时,然后根据响应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
很高兴知道解决方案。谢谢!