Ios NSUserDefaults和archiver检索问题

Ios NSUserDefaults和archiver检索问题,ios,objective-c,nsarray,nsuserdefaults,nskeyedunarchiver,Ios,Objective C,Nsarray,Nsuserdefaults,Nskeyedunarchiver,我在NSArray中遇到了一个奇怪的问题。该应用程序需要在两个具有不同输入的场景中访问相同的web服务。一个是初始状态,在NSKeyedArchiver的帮助下,服务器的响应保存到NSUserDefaults。接下来是在完成特定操作时,根据响应修改NSUserDefaults中的存储值 NSArray *sorted = [ActiveOrder arrayOfModelsFromDictionaries: [responseObject objectForKey:@"GetActiveOrde

我在
NSArray
中遇到了一个奇怪的问题。该应用程序需要在两个具有不同输入的场景中访问相同的web服务。一个是初始状态,在
NSKeyedArchiver
的帮助下,服务器的响应保存到
NSUserDefaults
。接下来是在完成特定操作时,根据响应修改
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对象

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


如果能知道解决办法,那就太好了。谢谢

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

NSUserDefaults
不是通用存储机制。请使用不涉及
.plist
文件的其他文件。您是否在域/实际对象的类中使用编码/解码?@特洛伊木马谢谢您的建议。我想试试。我可以知道原因吗,选择一个不涉及普利斯特的吗?@ondermerol我想是的。我们在函数调用的某个点手动修改一些值。是吗?并非所有对象都可以存储在
.plist
文件中,因此最好将序列化(即KeyedArchiver)产生的
NSData
对象直接写入磁盘。不建议使用同步吗?我试过了,没有变化。
NSMutableArray *itemsFromLastResult = [[NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: TAG_ACTIVE_ORDERS_RESPONSE]] mutableCopy];