代码之家  ›  专栏  ›  技术社区  ›  woody993

来自nsmutabledata的nsdictionary

  •  0
  • woody993  · 技术社区  · 16 年前

    我以前使用initWithContentsForURL将plist下载到nsDictionary中,但在同一线程上运行时,这会挂起UI,因此现在我已转到nsurlConnection,问题是我无法再调用方法来用nsMutableData初始化nsDictionary。获取NSmutable数据并将其放入NSDictionary的最佳方法是什么?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Farcaller    16 年前

    您需要的是nspropertylistserialization:

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

    是最简单的选择。

        2
  •  1
  •   mipadi    16 年前

    不知道你到底想做什么,我就要尝试一下;即使它不起作用,我相信你可以为你的目的而调整它。

    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 对象。

    这段代码远非完美(需要错误检查等东西),但它可能会让您开始工作。

    警告:我写可可软件已经有好几年了,但我从来没有接触过iPhone,所以这只是个猜测。

        3
  •  0
  •   tchen    16 年前

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

    在connection:didReceiverResponse:method(nsurlConnection的委托)中,可以将旧nsDictionary复制到nsmutableDictionary中,然后将URL响应数据插入其中。然后将nsmutabledictionary转换为新nsdictionary。