我是 Cocoa 和 Objective-c 的初学者——所以请原谅我一个可能微不足道的问题。
我目前正在开发一个 XCODE-Project,它通过 NSJSONSerialization 获取一些数据并将其存储以供进一步工作。
在这一步,我将把获取数据的过程封装到一个类中,该类具有一些用于所需参数的设置器(要从中获取的 url 和应该解析为数组的层)。为了使用这个过程,我在这个类中创建了一个方法,它创建一个连接和一个请求并返回应该包含数据的数组。经过一些测试后,我尝试创建此类的一个实例并调用开始获取数据的方法。
我的问题是,从我的新实例“block_stats”调用方法 data_array 并将数据存储在相同类型的数组中 - 数组为空
table_data = [block_stats data_array];
这种行为的原因是 (didReceiveResponse,didReceiveData,connectionDidFinishLoading) 中的方法的使用是异步工作的,并且 data_array 的返回是在下载完成之前完成的。
包含下载部分的类中的方法:
- (NSMutableArray *)data_array
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
if(data_array)
{
[data_array removeAllObjects];
} else {
data_array = [[NSMutableArray alloc] init];
}
NSURLRequest *request = [NSURLRequest requestWithURL:data_url];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
if(connection)
{
webdata = [[NSMutableData alloc]init];
}
return data_array;
}
另一个视图中的 IBAction,它创建实例并调用方法来获取数据
- (IBAction)refresh:(UIBarButtonItem *)sender {
KDJSONparser *block_stats = [[KDJSONparser alloc]init];
[block_stats setURL:[NSURL URLWithString:@"*JSONDATA_URL*"]];
[block_stats setLayer:@"blocks"];
table_data = [block_stats data_array];
}
如果有人可以提供一些建议,我将非常高兴。如果它对我来说尽可能容易理解,那就太好了。提前致谢!