NSCoding Сериализация стека iPhone NavigationController - PullRequest
0 голосов
/ 16 мая 2010

РЕДАКТИРОВАТЬ: Кажется, я нашел то, что помогло. Я сохранил «стек» ivar, и теперь он, кажется, работает

Я сериализовал несколько пользовательских классов NSObject без проблем. Теперь я хотел бы сериализовать мой стек NavigationController. Каждому viewController требуется только несколько сохраненных свойств, чтобы восстановить дерево навигации. Я реализовал протокол NSCoding в viewControllers, успешно закодировал их в NSData и сохранил на диск.

Когда я пытаюсь загрузить стек, полученный массив имеет правильное количество объектов, но я продолжаю получать ошибки EXC_BAD_ACCESS, когда пытаюсь установить массив viewController. Я просто ошибаюсь?

//AppDelegate.m
-(void) loadDataFromDisk {
   NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
   NSString *programDataPath = [libraryPath stringByAppendingPathComponent:@"programData.dat"];
   NSData *programData = [[NSData alloc] initWithContentsOfFile:programDataPath];
   NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:programData];
   //stack is a mutable array declared in header
   //stack = [decoder decodeObjectForKey:@"stack"];
       stack = [[decoder decodeObjectForKey:@"stack"]retain]; //retain fixes? Seems to work
   [decoder release];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
   // Override point for customization after app launch    
   [window addSubview:[navigationController view]];
   [window makeKeyAndVisible];
   NSLog(@"%@",self.navigationController.viewControllers);
   if ([stack count] > 1) {
           self.navigationController.viewControllers = stack;
           [stack release];  //retained earlier
   }
   return YES;

}

1 Ответ

0 голосов
/ 18 октября 2010

Мне пришлось сохранить стек viewController после загрузки его с диска. Очевидно, что если вы не сразу назначите данные сохраненному свойству, они исчезнут.

...