Я пытаюсь сохранить объект в NSUserDefaults, но мне это не удалось.Сценарий таков, у меня есть объект syncObject класса SyncObjct.Я реализовал следующие методы в классе SyncObject
- (NSMutableDictionary*)toDictionary;
+ (SyncObject*)getFromDictionary :(NSMutableDictionary*)dictionary;
- (id) initWithCoder: (NSCoder *)coder;
- (void) encodeWithCoder: (NSCoder *)coder;
А также класс SyncObject является классом NSCoding.Теперь класс SyncObject содержит NSMutableArray с именем jobsArray.Этот массив содержит объекты класса JobsObject.Я реализовал те же методы выше для этого класса, чтобы сделать его совместимым с кодированием.В методе toDictionary класса SyncObject я сохраняю этот массив в словаре, записывая следующую строку.
[dictionary setValue:jobsArray forKey:@"jobsArray"];
и извлекаю его в метод getFromDictionary класса SyncOject, записывая следующую строку.
+ (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;
}
А также я храню syncObject в NSUserDefault, записывая следующие строки.
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:syncObject];
[userStorage setObject:myEncodedObject forKey:SYNC_OBJECT];
Я получаю объект из NSUserDefaults, записывая следующие строки
NSData *myEncodedObject = [userStorage objectForKey: SYNC_OBJECT];
syncObject = (SyncObject*)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
Проблема в том, что яне удалось получить jobsArray правильно.Возвращается какой-то недопустимый объект и происходит сбой приложения при попытке доступа к нему.Кто-нибудь может подсказать причину этой проблемы?
С наилучшими пожеланиями