0

そのため、NSCoding を使用してカスタム オブジェクトを plist に保存する必要があることに気付きました。

私が苦労している部分は、メソッドinitWithCoderencodeWithCoderメソッドを実装した後にそれを行う方法です。idそれらはそれぞれとを返すvoidので、オブジェクトが NSData に変換された場合、またはオブジェクトに対して何を行ったとしても、データはどこにあるので、保存できますか?

このようにメソッドを設定しました:

- (id)initWithCoder:(NSCoder *)decoder { // Decode
    if (self = [super init]) {
        self.name = [decoder decodeObjectForKey:@"gameName"];
        self.genre = [decoder decodeObjectForKey:@"gameGenre"];
        self.rating = [decoder decodeObjectForKey:@"gameRating"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder { // Encode
    [encoder encodeObject:self.name forKey:@"gameName"];
    [encoder encodeObject:self.genre forKey:@"gameGenre"];
    [encoder encodeObject:self.rating forKey:@"gameRating"];
}

これらのオブジェクト (既に NSMutableArray にある) を .plist に保存し、アプリを再度開くときに呼び出すための次のステップを理解しようとしています。

どんな助けでも大歓迎です!

4

2 に答える 2

1

まあ、それはあなたが何をしたいかによります。NSKeyedArchiverそれで十分である可能性があります。検討:

+ (NSData *)archivedDataWithRootObject:(id)rootObject
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path

これは、オブジェクト グラフのルート オブジェクトを取得し、シリアル化されたデータで NSData オブジェクトを作成するか、データをファイルにシリアル化します。

次に、どれがこれらを持っているかを見NSKeyedUnarchiverてください:

+ (id)unarchiveObjectWithData:(NSData *)data
+ (id)unarchiveObjectWithFile:(NSString *)path

きっと、あなたの目標に向かって歩みを進めてくれるはずです。

編集

どの配列に書き込みたいかを伝えようとすると(私は思う)、エラーが発生します。この行で「予想される識別子」を取得します: [rootObject setValue:[self.dataController.masterGameList] forKey:@"games"]; – ルーケ

それが KVC API です。アーカイブ/アーカイブ解除メソッドはクラス メソッドであるため、オブジェクト グラフ全体を次のように保存するだけです。

if (![NSKeyedArchiver archiveRootObject:self.dataController.masterGameList
                                 toFile:myPlistFile]) {
    // Handle error
}

次に、次のようにロードします。

self.dataController.masterGameList =
    [NSKeyedUnarchiver unarchiveObjectWithFile:myPlistFile];
于 2012-09-11T14:37:05.573 に答える
0

オブジェクト グラフのルート オブジェクトに実装NSKeyedArchiverして保存し、NSKeyedUnarchiverオブジェクト グラフを再構成する必要があります。

このチュートリアルを参照してください

于 2012-09-11T14:48:33.677 に答える