【问题标题】:canonical way to read plist from URL into NSDictionary? How to control timeout?从 URL 读取 plist 到 NSDictionary 的规范方法?如何控制超时?
【发布时间】:2009-06-13 16:06:59
【问题描述】:

我有一个提供 plist XML 文件的 servlet。将其放入NSDictionary 的最佳方法是什么?我基本上可以使用:

NSDictionary* dict = [ [ NSDictionary alloc] initWithContentsOfURL:
                     [NSURL URLWithString: @"http://example.com/blah"] ];

但是我无法控制超时;我宁愿不让我的 UI 挂起 60 秒,只是因为服务器(我可能无法控制)有问题。我知道NSURLRequest,它将让我执行以下操作:

NSURLRequest *theRequest=[NSURLRequest requestWithURL:
         [NSURL URLWithString: @"http://example.com/blah"
                  cachePolicy:NSURLRequestUseProtocolCachePolicy
             timeoutInterval:5 ];

但我不太明白如何将其提供给 NSDictionary。

【问题讨论】:

    标签: iphone timeout plist nsdictionary


    【解决方案1】:

    您需要使用异步方法来执行此操作。从这个答案/帖子开始:

    Can I make POST or GET requests from an iphone application?

    这将为您获取数据并将其放置在一个变量中:responseData。现在您需要通过以下方法添加代码以将其转换为 NSDictionary:

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
    

    我找到了两种将 NSData 转换为 NSDictionary 的可能方法。这种方式直接来自苹果Archives and Serializations Guide

    NSString *errorStr = nil;
    NSPropertyListFormat format; 
    
    NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData: responseData
                    mutabilityOption: NSPropertyListImmutable
                    format: &format
                    errorDescription: &errorStr];
    

    第二:

    NSString *string = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
    NSDictionary *dictionary = [string propertyList];
    [string release];
    

    【讨论】:

    • 太好了,谢谢科里。来寻找一种方式......你给了我两个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多