NSDictionary来自NSMutableData

时间:2009-08-16 13:30:59

标签: iphone objective-c nsdictionary nsdata

我以前使用initWithContentsOfURL将plist下载到NSDictionary中,但是这会在同一个线程上运行时挂起UI,所以现在我已经转移到NSURLConnection,问题是我不能再调用一个方法来启动NSDictionary NSMutableData。采用NSMutableData并将其放入NSDictionary的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

您需要的是NSPropertyListSerialization:

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

是最简单的选择。

答案 1 :(得分: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,所以这是猜测。

答案 2 :(得分:0)

您的NSDictionary是否还有其他需要保留的数据?

在连接:didReceiveResponse:方法(NSUrlConnection的委托)中,您可以将旧的NSDictionary复制到NSMutableDictionary中,然后将URL响应数据也插入其中。然后将NSMutableDictionary转换为新的NSDictionary。