3

JSON 応答と plist ファイルを含む辞書があります。plist ファイルの値を JSON 応答値で更新したいと考えています。どうすればいいですか?

4

2 に答える 2

8

これは私がやったことです、私は今それに取り組んでいますが、私はそこに着いています:


JSON から辞書へ:

NSString *jsonString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
//NSLog(@"%@",jsonString);

NSArray *result = [jsonString JSONValue];

for(NSDictionary *dictionary in result){
    return dictionary; //if you are getting more then one row, do something here
}

辞書の保存:

id plist = plistDict;

NSString *errorDesc;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"Data.plist"];
NSLog(@"%@",plistPath);

NSData *xmlData;
NSString *error;

xmlData = [NSPropertyListSerialization dataFromPropertyList:plist
                                                     format:NSPropertyListXMLFormat_v1_0
                                           errorDescription:&error];
if(xmlData) {
    if ([xmlData writeToFile:plistPath atomically:YES]) {
        NSLog(@"Data successfully saved.");
    }else {
        NSLog(@"Did not managed to save NSData.");
    }

}
else {
    NSLog(@"%@",errorDesc);
    [error release];
}
}

値を更新する場合は、plist を開いて辞書に配置し、辞書の値を更新して、辞書を plist に再度保存する必要があります。

お役に立てれば。

于 2009-11-28T13:01:59.287 に答える
1

Mac OS X 10.7 または iOS 5 で作業している場合、JSON ファイルを読み書きする NSJSONSerialization という Foundation クラスがあります。JSON を plist に変換するのは次のように簡単です: (ARC または GC がオンになっていることを意味します)

NSString *infile = @"/tmp/input.json"
NSString *oufile = @"/tmp/output.plist"

[[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:infile]
                                 options:0
                                   error:NULL] writeToFile:oufile
                                                atomically:YES];

ただし、NSDate および NSData オブジェクトは JSON に表示できないため、plist から JSON への変換はより面倒になります。ファイルの内容を確認し、NSData と NSDate を別の方法で保存する必要がある場合があります (NSData を Base-64 文字列として、NSDate を UNIX 時間として保存するなど)。

于 2012-06-06T03:17:44.417 に答える