0

以前は initWithContentsOfURL を使用して plist を NSDictionary にダウンロードしていましたが、これを同じスレッドで実行すると UI がハングするため、NSURLConnection に移動しました。問題は、NSMutableData で NSDictionary を初期化するメソッドを呼び出すことができなくなったことです。NSMutableData を取得して NSDictionary に配置する最良の方法は何ですか?

4

3 に答える 3

3

必要なのは NSPropertyListSerialization です:

NSDictionary *myDict = [NSPropertyListSerialization propertyListFromData:myData mutabilityOption:NSPropertyListImmutable format:nil errorDescription:nil];

最も簡単なオプションです。

于 2009-08-16T13:58:17.507 に答える
1

あなたが何をしようとしているのか正確にはわからないので、私はこれを突き刺します。うまくいかなくても、目的に合わせて調整できると確信しています。

NSString *s = [[NSString alloc] initWithBytes:[mutableData bytes] length:[mutableData length] encoding:NSUTF8StringEncoding];
NSString *path = NSTemporaryDirectory();
path = [path stringByAppendingPathComponent:@"tmpfile.txt"];
if ([s writeToFile:path atomically:NO encoding:NSUTF8StringEncoding error:nil]) {
    NSDictionary *d = [[NSDictionary alloc] initWithContentsOfFile:path];
}

簡単に言えば、指定されたデータから文字列を作成し、それを一時ファイルに書き込んでから、その一時ファイルをNSDictionaryオブジェクトにロードします。

このコードは完璧とはほど遠い (エラー チェックなどを必要とする) ものですが、始めるには役立つかもしれません。

警告: 私は数年間 Cocoa ソフトウェアを書いていますが、iPhone に触れたことがないので、推測です。

于 2009-08-16T13:50:35.410 に答える
0

NSDictionary には、保持する必要がある他のデータがありますか?

connection:didReceiveResponse: メソッド (NSUrlConnection のデリゲート) では、古い NSDictionary を NSMutableDictionary にコピーしてから、URL 応答データも挿入できます。次に、NSMutableDictionary を新しい NSDictionary に変換します。

于 2009-08-16T14:04:41.833 に答える