Den här tråden är löjligt lång, men kan du någon om Cocoa så skulle jag bli hyvens glad om du ville läsa igenom den och se om du förstår mitt problem...
Försöker få ett program att arkivera mitt fina objectsdiagram. Jag har inte fått det att funka så jag har bantat ner problemet till två objekt.
Såhär ser problemet ut:
Jag har ett objekt Person som har tre instansvariabler:
NSString *personName;
int personAge;
Book *personBook;
Book i sin tur har två instansvariabler:
NSString *bookTitle;
int pageCount;
Eftersom man ska "lära" objekten att arkivera sig själva har jag implementerat <NSCoding> - protokollet till både Person och Book. Jag har implementerat
- (void)encodeWithCoder:(NSCoder *)coder
och
- (id)initWithCoder:(NSCoder *)coder
hos båda objekten.
Själva programmet består av en NSMutableArray som lagrar ett antal person-object och presenterar dem i en NSTableView.
Jag har implementerat följande metoder för at t starta arkivering samt laddning av de sparade filerna:
- (NSData)dataRepresentationOfType:(NSString *)aType
{
[tableView deselectAll:nil];
return [NSArchiver archivedDataWithRootObject:students];
}
samt
- (BOOL)loadDataRepresentation:(NSData * data ofType:(NSString *)aType
{
[students release];
students = [[NSUnarchiver unarchiveObjectWithData:data] retain];
[self updateUI];
return YES;
}
Allt verkar funka finfint. Jag kan spara mitt dokument och det verkar funka bra. Men när jag öppnar filen igen (jag har följt arbetsgången med debuggern) så läser den in alla objekt (även Book) men precis när den lämnar funktionen...
students = [[NSUnarchiver unarchiveObjectWithData:data] retain];
...så dealloceras samtliga Book-objekt och programmet krashar med felmeddelandet...
ArchiveringsTest.app has exited due to signal 11 (SIGSEGV).
Mina kunskaper går bet. Någon som förstår vad jag gjort för fel, eller finns det någon som helt enkelt kan tala om för mig hur jag skall göra för att avarkivera bägge objekten?
Tacksam för svar!!!´
/JO