Domanda

EDIT: mi sembra di avere trovato qualcosa che ha aiutato. Ho mantenuto l'Ivar "stack" e ora sembra funzionare

Sono stato serializzazione diverse classi personalizzate NSObject senza alcun problema. Ora mi piacerebbe serializzare il mio stack navigationController. Ogni viewController bisogno solo di un paio di proprietà salvate al fine di ricostruire l'albero di navigazione. Ho implementato il protocollo NSCoding nelle viewControllers, e con successo codificato loro di NSData e salvato su disco.

Quando tento di caricare la pila, la matrice risultante ha il numero corretto di oggetti, ma continuo a ricevere errori EXC_BAD_ACCESS quando si tenta di impostare la matrice viewController. Sto solo andando su questo nel modo sbagliato?

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

}

È stato utile?

Soluzione

ho dovuto -retain lo stack viewController dopo aver caricato dal disco. Evidentemente, se non si assegna immediatamente i dati a una proprietà mantenuto svanisce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top