0

私のplistはarray with dictionaries.

起動時に、.plist がまだ存在しない場合はコピーさbundleれます。documents directory

ただし、plist が既に存在する場合documents directory:

各ディクショナリは、バンドル内の更新されたツイン ディクショナリと照合して、"District" 文字列の変更を探す必要があります。

そしてもちろん、変更があった場合は弦を交換してください。

これはコピー plist 関数です。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self copyPlist];
return YES;
}

- (void)copyPlist {

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Wine.plist"];
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Wine" ofType:@"plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path]) {
    [fileManager copyItemAtPath:bundle toPath:path error:&error];
} else {
//I need to check if the "District" value has been changed in any of the dictionaries.
}
}

これを行う方法についての提案、または有用なチュートリアル/サンプル コードはありますか?

私の推測では、plist の内容を NSMutableArrays:bundleArrayおよびdocumentsArray. 次に、配列内で一致する辞書を見つけます。「名前」文字列が等しいことを確認することで実行できます。次に、一致する辞書で 2 つの "District" 文字列を比較し、変更を探して、変更されたものを置き換えます。しかし、私はそれがどのように行われるべきかわからないので、これは非常に重要なので、どんな助けも非常に役に立ちます!

4

1 に答える 1

1

あなたの辞書構造は次のようになっていると思います:「配列」としてのルート

  1. 「地区を鍵の一つとする」辞書1

  2. 「地区が鍵の一つ」の辞書2

Array の特定のインデックスにある2 つのNSDictionaryが等しいかどうかを確認できます。これは以下でコーディングしました。

NSArray *bundleArray=[[NSArray alloc] initWithContentsOfFile:@"path to .plist in bundle"];;
NSArray *documentArray=[[NSArray alloc] initWithContentsOfFile:@"path to .plist in DocumentDirectory"];
BOOL updateDictionary=NO;

for(int i=0;i<bundleArray.count;i++){
    NSDictionary *bundleDic=[bundleArray objectAtIndex:i];

    NSDictionary *documentDic=[documentArray objectAtIndex:i];

    if(![bundleDic isEqualToDictionary:documentDic])
    {
        /*
         *if there is any change between two dictionaries. 
         * i.e bundle .plist has changed so update .plist in document Directory
         */

        [documentDic setValue:[bundleDic objectForKey:@"District"] forKey:@"District"];
        updateDictionary=YES;

    }
}

//Update Dictionary
if(updateDictionary){
    [documentArray writeToFile:@"path to .plist in DocumentDirectory" atomically:YES];
}
于 2012-09-09T14:51:54.240 に答える