で奇妙な問題が発生しましたNSArray
。アプリは、異なる入力で 2 つのシナリオで同じ Web サービスをヒットする必要があります。1 つは初期状態で、サーバーからの応答が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 つの ActiveOrder オブジェクトではなく@"6 objects"が出力されます。
NSMutableArray *itemsFromLastResult = [[NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: TAG_ACTIVE_ORDERS_RESPONSE]] mutableCopy];
上記の行を使用して、保存された値にアクセスして変更しています。実際のオブジェクトの代わりに @"6 objects" を出力している理由がとてもわかりません。そして、ランダムにクラッシュしています(これが理由であると推測しています)。私が間違っていることはありますかNSKeyedArchiver
/NSKeyedUnarchiver
解決策を知っておいてよかったです。ありがとう!