我想在NSUserDefaults中保存一个对象,但是我没有成功。情景是,我有SyncObjct类的对象syncObject。我在SyncObject类中实现了以下方法在NSUserDefaults中存储自定义对象
- (NSMutableDictionary*)toDictionary;
+ (SyncObject*)getFromDictionary :(NSMutableDictionary*)dictionary;
- (id) initWithCoder: (NSCoder *)coder;
- (void) encodeWithCoder: (NSCoder *)coder;
而且SyncObject类是NSCoding类。现在,SyncObject类包含一个名为jobsArray的NSMutableArray。该数组包含类JobsObject的对象。我为这个类实现了上述相同的方法,以使它符合编码。在SyncObject类的toDictionary方法中,我通过编写以下行将此数组存储在字典中。
[dictionary setValue:jobsArray forKey:@"jobsArray"];
我正在通过编写以下行在SyncOject类的getFromDictionary方法中检索它。
+ (SyncObject*)getFromDictionary :(NSMutableDictionary*)dictionary
{
NSLog(@"SyncObject:getFromDictionary");
SyncObject *syncObject = [[SyncObject alloc] init];
@try
{
syncObject.noOfJobs = [[dictionary valueForKey:@"noOfJobs"] intValue];
syncObject.totalJobsPerformed = (TotalJobsPerformed*)[dictionary valueForKey:@"totalobsPerformed"];
syncObject.jobsArray = [dictionary valueForKey:@"jobsArray"];
}
@catch (NSException * e)
{
NSLog(@"EXCEPTION %@: %@", [e name], [e reason]);
}
@finally
{
}
return syncObject;
}
而且我还通过编写以下行在NSUserDefault中存储syncObject。
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:syncObject];
[userStorage setObject:myEncodedObject forKey:SYNC_OBJECT];
我NSUserDefaults的从通过编写以下行
NSData *myEncodedObject = [userStorage objectForKey: SYNC_OBJECT];
syncObject = (SyncObject*)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
问题检索对象是我不能够正确地检索jobsArray。一些无效的对象返回并且在尝试访问应用程序时崩溃。请谁能告诉我这个问题的原因?
问候
您使用的线程?你叫NSUserDefault的同步吗? – daveoncode