2014-03-24 22 views
0

我將json內容保存在plist文件中。在iOS中使用json數據更新plist

//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。

回答

0

使用類似:

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

看來你的.plist最初是JSON數據的精確副本。是否還有其他一些修改.plist的代碼?如果沒有,爲什麼你只想寫更改?這是非常複雜的代碼,容易出錯,並且需要很多時間。將所有JSON數據寫入plist是迄今爲止最簡單的方法。

如果你有其他一些代碼修改.plist,那麼你也必須跟蹤JSON數據,否則你不知道它是否以及如何修改。祝你好運。