0

辞書の plist 配列がまだ存在しない場合は、バンドルからドキュメント ディレクトリにコピーされます (appDidFinishLaunching)。

辞書内の一部の文字列はユーザ​​ー定義であり、ユーザーが値を設定する前にデフォルト値があります。(つまり、キー: "お気に入り" 値: お気に入りに追加すると、"いいえ" が "はい" に変わります)

一部の辞書の一部の文字列を変更した場合 (オブジェクトの価格が変更された場合など)、および/または配列に新しい辞書を追加した場合、ユーザー定義の文字列を変更せずにこれらの変更を管理するにはどうすればよいですか?

私は2つのオプションについて考えました:

1: 既存の辞書の文字列を更新された辞書の文字列と比較し、ユーザー定義の文字列に触れることなく、変更された辞書を置き換えます。また、新しい辞書を探します。

2: ユーザー定義文字列用の辞書の新しい plist を作成します。つまり、「名前」文字列がメイン オブジェクトと同じであるため、コンテンツが表示されたときにそれらを「接続」できます。その後、メイン plist を置き換えて、ユーザー定義データを作成できます。手付かずのまま。

nr 2 が最も簡単な方法だと思います。でも初めての応募なのでよくわかりません…

だから私の質問は: オプション 2 は良い方法ですか? はいの場合、確認が回答として受け入れられます。いいえの場合は、潜在的な問題があるためだと思います。説明してください。また、nr 1 でない場合は別の方法を提案してください。

Ps。コピー用の現在のコード:

- (void)copyPlist {
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Objects.plist"];
     NSLog(@"Path %@", path); 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Objects" ofType:@"plist"];

        [fileManager copyItemAtPath:bundle toPath:path error:&error];
    }
}
4

1 に答える 1

1

オプション 2 が最適なオプションだと思います。プロパティに使用する内部名ではなく、表示名のみを変更できるようにします。そうではなく、ある時点で別のフィールド「Foo」を追加したが、ユーザーが既存のフィールド「Bar」の名前を「Foo」にすでに変更していた場合はどうなるでしょうか。

于 2012-08-20T15:04:46.243 に答える