2013-06-02 61 views
-3
NSString *jsonPath = [[NSBundle mainBundle] pathForResource:@"CRN_JSON" 
                ofType:@"json"]; 


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    data = [NSData dataWithContentsOfURL: 
        [NSURL URLWithString:@"http://properfrattire.com/Classifi/CRN_JSON.json"]]; 
    [self performSelectorOnMainThread:@selector(fetchedData:) 
          withObject:data waitUntilDone:YES]; 

}); 

运行此代码后,我的数据变量为零。如果你按照链接,你会看到它是一个JSON文件。我已经在本地运行这个完全相同的文件的功能,但它无法获得给定的URL没有错误的数据。NSData dataWithContentsOfURL:返回零

+1

这不是说有错误。只是你期待异步调用的行为就好像它是同步的。 – 2013-06-02 14:44:23

+0

你能解释一下你的意思吗? –

+0

您希望传递给dispatch_async的块中的命令序列按顺序执行,并在函数返回后完成。但是,由于它是** async,所以**不会发生 - 函数在块结束运行之前返回。这在什么不明显?你没有阅读'dispatch_async()'的文档吗? – 2013-06-02 14:54:02

回答

2

不知道为什么你嵌套调用URLWithString:

[NSURL URLWithString:[NSURL URLWithString:@"http://properfrattire.com/Classifi/CRN_JSON.json"]]]; 

一旦会做:

[NSURL URLWithString:@"http://properfrattire.com/Classifi/CRN_JSON.json"]; 

此外,你应该使用dataWithContentsOfURL:options:error:所以你可以看到任何错误。

+0

对不起是的,我只是在这里输入它错误,这是我实际上有,但它仍然无法正常工作。 –

+1

@BryceLanglotz在提问时,IT对于粘贴REAL代码非常重要。使用虚假代码进行打字非常难以找到问题。 – rmaddy

相关问题