在iOS中使用json数据更新plist

时间:2014-03-24 12:16:35

标签: ios objective-c json plist

我在plist文件中保存json内容。

//Fetch json
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:filePath];

//Get json in dictionary format
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"dict: %@",dict);

//Get plist path
NSString *errorDesc;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths objectAtIndex:0];
NSString *plistPath = [documentsDirectory1 stringByAppendingPathComponent:@"SampleData.plist"];
NSLog(@"plistPath : %@",plistPath);

//Save data from json to plist
NSString *error;
data = [NSPropertyListSerialization dataFromPropertyList:dict
                                                  format:NSPropertyListXMLFormat_v1_0
                                        errorDescription:&error];
if(data) {
    if ([data writeToFile:plistPath atomically:YES]) {
        NSLog(@"Data successfully saved.");
    }else {
        NSLog(@"Did not managed to save NSData.");
    }
}
else {
    NSLog(@"%@",errorDesc);
}

它完美无缺。

现在假设,有人在json中添加了一个新项目。然后如何只将新项目附加到plist中。

PS:在这里,我不想重写整个plist。我只想检查json是否更新。如果更新了json,那么我想通过只添加新项来更新plist。

2 个答案:

答案 0 :(得分:0)

使用类似:

NSMutableDictionary *plistContent = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
[plistContent setObject:value forKey:key];
[plistContent writeToFile:plistPath atomically:YES];

答案 1 :(得分:0)

看来你的.plist最初是JSON数据的精确副本。还有其他代码可以修改.plist吗?如果没有,为什么你只想写更改?这是非常复杂的代码,容易出错,并且会花费大量时间。将所有JSON数据写入plist是迄今为止最简单的方法。

如果你有其他代码修改.plist,那么你也必须跟踪JSON数据,否则你无法知道它是否以及如何被修改了。祝好运。