0

アプリにデータを入力するために、辞書を含む配列として構造化されたplistを使用しています。plistはバンドルに保存されます。一部の辞書の一部の文字列にいくつかの変更を加えました(スペルの修正など)。

appDidFinishLaunchingWithOptionscopyPlistplistが存在しない場合は、ドキュメントディレクトリにコピーするための呼び出し。したがって、plistが存在する場合は、すべての辞書のいくつかの文字列に変更がないかチェックし、これらの文字列を置き換える必要があります。

私は2つ作ったNSMutableArrays

if ([fileManager fileExistsAtPath: documentsDirectoryPath]) {
NSMutableArray *newObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:documentsDirectoryPath];
NSMutableArray *oldObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:bundlePath];

//Then arrange the dictionaries that match so some their strings can be compared to each other.
}

NSDictionariesいくつかの文字列を比較できるように、どのようにマッチングを調整できますか?文字列は変更されていないため、これNameを使用して一致を認識することができます。

コードの例や、便利なチュートリアルやサンプルコードへの参照は素晴らしいでしょう。私自身の調査では何も役に立たなかったので、これを修正する必要があります。

4

1 に答える 1

1

plistは、次のように辞書に直接読み込むことができます。

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];

2つのplistに対してこれを行う場合、次のように、他の一致するキーを使用して一方を更新できます。

- (void)updateDictionary:(NSMutableDictionary *)dictA withMatchingKeysFrom:(NSDictionary *)dictB {

    // go through all the keys in dictA, looking for cases where dictB contains the same key
    // if it does, dictB will have a non-nil value.  use that value to modify dictA

    for (NSString *keyA in [dictA allKeys]) {
        id valueB = [dictB valueForKey:keyA];
        if (valueB) {
            [dictA setValue:valueB forKey:keyA];
        }
    }
}

始める前に、次のように、更新される辞書を変更可能にする必要があります。

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSMutableDictionary *dictA = [dict mutableCopy];
于 2012-09-08T23:09:44.347 に答える