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 回答