2011-03-17 37 views
1

我有一個我的類實例,它基本上是來自我自己類的另一個對象的可變數組。我需要這個存儲持久性數據,但我有麻煩,我使用方法類數據類型的持久性數據

-(void)archiveFavorites { 
    Singleton *singleton = [Singleton sharedSingleton]; 
    NSLog(@"archiving"); 
    GameDatabase *favoritesToArchive = singleton.favorites; 
    [NSKeyedArchiver archiveRootObject:favoritesToArchive toFile:[self archivePath]]; 
} 

-(NSString *)archivePath { 
    NSString *docDir = 
    [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    return [docDir stringByAppendingPathComponent: @"Favorites.dat"]; 
} 

在我的視圖控制器試圖存檔。然後我打電話

[viewController archiveFavorites]; 

在我的應用程序委託「應用的位置信息並輸入背景」

基本上我想保存我自己的類(GameDatabase)的實例在存檔。當檔案我拋出的異常:

編輯:好了,所以繼承人什麼我想在我的兩個類,現在實施: GameDatabase.m

- (void)encodeWithCoder:(NSCoder *)encoder{ 
    [encoder encodeObject:games forKey:@"Games"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder{ 
    if(self = [super init]) 
    { 
     games = [decoder decodeObjectForKey:@"Games"]; 
    } 
    return self; 
} 

GameRecord.m

- (id)initWithCoder:(NSCoder *)decoder { 

    if (self = [super init]) { 
     self.name = [decoder decodeObjectForKey:@"Name"]; 
     self.gameRules = [decoder decodeObjectForKey:@"GameRules"]; 
     self.players = [decoder decodeIntForKey:@"Players"]; 
     self.gameType = [decoder decodeIntForKey:@"GameType"]; 
     self.drinkType = [decoder decodeIntForKey:@"DrinkType"]; 
    } 
    return self; 

} 

- (void)encodeWithCoder:(NSCoder *)encoder { 

    [encoder encodeObject:self.name forKey:@"Name"]; 
    [encoder encodeObject:self.gameRules forKey:@"GameRules"]; 
    [encoder encodeInt:self.players forKey:@"Players"]; 
    [encoder encodeInt:self.gameType forKey:@"GameType"]; 
    [encoder encodeInt:self.drinkType forKey:@"DrinkType"]; 

} 

回答

0

你在正確的道路上,但你需要讓你的GameDatabase類實現NSCoding協議。只需添加兩種方法described in the docs

+0

我需要將它添加到協議中還是隻實現這兩個類? –

+0

這兩種方法是協議。除非你問另外一個問題? –

+0

哇,我所做的只是添加這兩種方法,它似乎工作,但我沒有把任何代碼放進去。那是對的嗎? –