Objective-C JSON Parse在其他类中不起作用

时间:2014-02-15 11:19:00

标签: iphone objective-c json nsurlconnection

我对NSURLConnectionDataDelegate有一个奇怪的问题。 我已经创建了一个用于解析json的类。 代码如下:

- (void)createJSONDictionaryFromURL:(NSURL *)url
{
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    (void)[[NSURLConnection alloc] initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    jsonData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{ 
    [jsonData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Fail with error");
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    self.jsonDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
    NSLog(@"%@", self.jsonDictionary);
}   

在Method connectionDidFinishLoading中,一切正确,控制台显示正确的数据。 但我想在我的ViewController的viewDidLoad方法中使用它。

JSONParser *parser = [[JSONParser alloc] init];
NSDictionary *dict = [[NSDictionary alloc] init];
[parser createJSONDictionaryFromURL:url];
dict = parser.jsonDictionary;

NSLog(@"%@", dict);

控制台显示(null),任何人都可以帮助我吗?

抱歉我的英文不好

1 个答案:

答案 0 :(得分:1)

由于网络连接(它是异步的),您的JSONParser是异步的。因此,当您当前致电parser.jsonDictionary时,您会发现数据尚未就绪。

您不希望在数据可用之前尝试阻止,而是应该设置回调以在数据准备就绪时将数据提供给视图控制器(这样您就可以保存并更新UI)。

可以通过向delegate添加JSONParser属性并让视图控制器自行分配并实现一些回调方法来完成。或者,使用较少的代码,JSONParser可以提供视图控制器设置的块属性,并在connectionDidFinishLoading:中调用(确保@property使用(copy,nonatomic)`)。