从URL到NSDictionary读取plist的规范方法?如何控制超时?

时间:2009-06-13 16:07:00

标签: iphone timeout plist nsdictionary

我有一个提供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。

1 个答案:

答案 0 :(得分:5)

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

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

这将为您提供数据并将其放在varibale中:responseData。现在,您需要添加代码以使用以下方法将其转换为NSDictionary:

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

我找到了两种将NSData转换为NSDictionary的方法。这种方式直接来自Apple 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];