我有一个方法getnamefornumbers
,它调用基于肥皂的Web服务(sudzc生成),它返回一些我存储在数组中的数据以供使用。
但问题是,当我调用方法时,它会花费时间执行并在此方法执行后进行编码,这会导致null数组。
当这个方法完成它的工作时,我能做什么,然后执行其余的代码。
答案 0 :(得分:0)
您应该使用NSURLConnection
委派方法。在异步环境中,这是正常行为:
所以你必须有两个解决方案,让它同步,所以你只会在答案到来之后继续(在你的情况下阵列被填满),我可能会不鼓励。或者,将其设为异步,并在实际使用时使用该数组。
至于如何实现这一点的具体细节,必须提供更多细节,以便我给你提供建议。
更新1.0
-(void)requestConnectionToServer{
NSURL *url= [NSURL URLWithString:@"myWebServiceURL"];
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:url];
self.reference=aReference;
[theRequest setHTTPMethod:@"GET"];
[theRequest setTimeoutInterval:20.0];
[NSURLConnection connectionWithRequest:theRequest delegate:self];
}
#pragma mark NSURLConnectionDelegate Implementation
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"Response:%@",[[NSString alloc] initWithData:webData encoding:NSASCIIStringEncoding]);
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"ERROR with theConenction %@",error);
}
更新2.0
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
myArray = [MyWebServiceAccess getnamefornumbers];
dispatch_sync(dispatch_get_main_queue(), ^{
[myArray makeSomething];
});
});
答案 1 :(得分:0)
您必须使用自定义委托。您应该定义协议并委派当前类来负责执行getnamefornumbers的类。完成操作后,您应该返回调用者类。
以下是协议http://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html
的示例