【发布时间】:2015-12-29 12:34:35
【问题描述】:
我正在从 webservice 获取数据。这是我的代码
- (NSArray *)setupConnection
{
airportArray = nil;
NSString *airportCode = [NSString stringWithFormat:@"somevalue"];
NSString *authenticationCode = [NSString stringWithFormat:@"somenumber"];
NSString *baseurl = [NSString stringWithFormat:@"someurl",authenticationCode,airportCode];
// NSString *mainurlString = [NSString stringWithFormat:@""];
// NSURL *mainurl = [NSURL URLWithString:mainurlString];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:baseurl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSArray *mainArray = (NSArray *)responseObject;
airportArray = [[NSMutableArray alloc] init];
for (NSDictionary *all in mainArray) {
airports = [all objectForKey:@"something"];
[airportArray addObject:airports];
NSLog(@"%@", airports);//**this prints the value**
}
//NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
UIAlertController *mainAlert = [UIAlertController alertControllerWithTitle:@"Something Wrong!" message:[error localizedDescription] preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:mainAlert animated:YES completion:nil];
}];
return airportArray;//**this returns null**
}
我检查了这个,但它是空的
- (void)printap
{
NSArray *chk = [self setupConnection];
NSLog(@"CHK :%@", chk);
}
打印时会打印值。但是当我返回时它是空的。这是为什么。帮我解决这个问题
【问题讨论】:
-
因为您正在异步请求数据,所以在您返回某些内容时,服务器还没有响应,因此仍然没有填充数组。设置一个completionBlock 作为
setupConnection方法的输入参数,并在实际请求完成时调用该方法。 -
那我该怎么办,我是新手。帮我解决这个问题
-
在异步操作的成功块中执行数据操作。要么使用同步调用,要么使用同步调用
-
谷歌它,之前已经被问过数百次了。例如这里stackoverflow.com/questions/30280026/…
-
这些链接将为您提供帮助:link1、link2、link3 和 Google search
标签: ios objective-c nsarray return-value return-type