2011-03-17 5 views
1

私はクラスのインスタンスをmineと呼びます。これは、基本的には自分自身のクラスの別のオブジェクトの可変配列です。これを永続データに保存する必要がありますが、問題が発生しています。この方法を使用してアーカイブを試しました。ビューコントローラーには、このメソッドを使用してアーカイブを試しました。私は、基本的に、私はアーカイブに自分のクラス(GameDatabase)のインスタンスを保存しようとしている「バックグラウンドを入力しなかったアプリの場所」私のアプリデリゲートにクラスデータ型のパーシスタントデータ

[viewController archiveFavorites]; 

を呼び出します。私は例外をスローしていた場合、それアーカイブ:

EDIT:[OK]をので、相続人、私は私の2クラスで、今実装しようとしています: 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プロトコルを実装する必要があります。単に2つのメソッドdescribed in the docsを追加してください。

+0

プロトコルに追加する必要がありますか、それともこれらの2つのクラスを実装するだけですか? –

+0

2つの方法がプロトコルです。あなたが別の質問をしていない限り? –

+0

うわー私がやったのは、これらの2つのメソッドを追加して動作するように見えましたが、私はそれらのコードを入れませんでした。あれは正しいですか? –

関連する問題