2

NSKeyedArchiver を使用して単一の配列をアーカイブすることについて、よく読んだことがあります。しかし、2 つの配列を保存するにはどうすればよいでしょうか。

UITabBarController 内の 2 つのビュー コントローラーのデータを保存/取得する必要があります。2 つのビュー コントローラーはそれぞれ、同じカスタム クラスのオブジェクトを作成しますが、ビュー コントローラーごとに個別の配列に格納します。

現在のコードでは、各配列を保存するために個別の方法を使用しています。問題は、2 番目の配列をアーカイブすると、最初の配列が上書きされることです。両方を保存することはできません。2 つの配列を独自のファイルに保存するか、データを 1 つのファイルに結合する必要があると思います。このためのコードの書き方がわかりません。誰か助けてくれませんか??

- (void)saveFermentableIngredients
{
    NSMutableData *fermentableData = [[NSMutableData alloc] init];
    NSKeyedArchiver *fermentableArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:fermentableData];
    [fermentableArchiver encodeObject:self.fermentableIngredients forKey:@"FermentableIngredients"];
    [fermentableArchiver finishEncoding];
    [fermentableData writeToFile:[self dataFilePath] atomically:YES];
}

- (void)saveHopIngredients
{
    NSMutableData *hopData = [[NSMutableData alloc] init];
    NSKeyedArchiver *hopArchiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:hopData];
    [hopArchiver encodeObject:self.hopIngredients forKey:@"HopIngredients"];
    [hopArchiver finishEncoding];
    [hopData writeToFile:[self dataFilePath] atomically:YES];
}

ここでは、initWithCoder メソッドと encodeWithCoder メソッドを実装して通常のセットアップを行ったことに言及する必要があります。問題は実際に上に投稿したコードにあると思われます。

4

3 に答える 3

0

このすべてのデータを一緒に保存する場合は、次のようにする必要があります。

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCode encodeObject:self.fermentableIngredients forKey:@"FermentableIngredients"];
    [aCode encodeObject:self.hopIngredients forKey:@"HopIngredients"];
}
于 2012-12-11T22:23:26.027 に答える
0

各配列を個別のファイルに保存することになりました。最初に、次のように 2 つの個別のファイル パスを宣言しました。

- (NSString *)fermentableDataFilePath
{
    return [[self documentsDirectory] stringByAppendingPathComponent:@"Fermentables.plist"];
}

- (NSString *)hopDataFilePath
{
    return [[self documentsDirectory] stringByAppendingPathComponent:@"Hops.plist"];
}

次に、元の質問に入れた保存方法で各ファイル パスを参照しました。したがって、最初のメソッドでは、writeToFile メソッドを次のように記述します。

[fermentableData writeToFile:[self fermentableDataFilePath] atomically:YES];
于 2012-12-13T20:18:28.187 に答える