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

Geo*_*old 1 iphone timeout nsdictionary plist

我有一个servlet,提供plist XML文件.什么是将其打入的最佳方法NSDictionary?我有这个基本上与:

NSDictionary* dict = [ [ NSDictionary alloc] initWithContentsOfURL:
                     [NSURL URLWithString: @"http://example.com/blah"] ];
Run Code Online (Sandbox Code Playgroud)

但后来我无法控制超时; 我宁愿不让我的UI挂起60秒只是因为服务器(我可能无法控制)有一个混蛋.我知道NSURLRequest,这将让我做以下事情:

NSURLRequest *theRequest=[NSURLRequest requestWithURL:
         [NSURL URLWithString: @"http://example.com/blah"
                  cachePolicy:NSURLRequestUseProtocolCachePolicy
             timeoutInterval:5 ];
Run Code Online (Sandbox Code Playgroud)

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

Cor*_*oyd 5

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

我可以从iphone应用程序发出POST或GET请求吗?

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
Run Code Online (Sandbox Code Playgroud)

我找到了两种将NSData转换为NSDictionary的方法.这种方式直接来自Apple Archives and Serializations Guide.

NSString *errorStr = nil;
NSPropertyListFormat format; 

NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData: responseData
                mutabilityOption: NSPropertyListImmutable
                format: &format
                errorDescription: &errorStr];
Run Code Online (Sandbox Code Playgroud)

第二:

NSString *string = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSDictionary *dictionary = [string propertyList];
[string release];
Run Code Online (Sandbox Code Playgroud)