2010-05-16 3 views
0

EDIT: Кажется, я нашел что-то, что помогло. Я сохранил «стек» ivar, и теперь он работаетNSCoding Сериализация iPhone NavigationController stack

Я сериализовал несколько пользовательских классов 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; 

}

ответ

0

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

Смежные вопросы