Pregunta

EDIT: Me parecen haber encontrado algo que ha ayudado. Me retuvo el Ivar "pila" y ahora parece estar funcionando

He estado varias clases de números de serie de encargo NSObject sin problema. Ahora me gustaría para serializar mi pila NavigationController. Cada viewController sólo necesita un par de propiedades guardadas con el fin de reconstruir el árbol de navegación. He aplicado el protocolo NSCoding en los viewControllers, y con éxito codificado a NSData y se guarda en el disco.

Cuando intento cargar la pila, la matriz resultante tiene el número correcto de objetos, pero me dan errores de EXC_BAD_ACCESS cuando intento configurar la matriz viewController. ¿Soy sólo ir sobre esto por el camino equivocado?

//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;

}

¿Fue útil?

Solución

tuve que -retain la pila viewController después de cargarlo desde el disco. Evidentemente, si no se asigna inmediatamente los datos a una propiedad retenida se desvanece.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top