我有一个方法getnamefornumbers
调用基于soap的web服务(sudzc生成),它返回一些数据,我存储在数组中使用。 但问题是,当我调用该方法时,需要花费时间执行并在此方法执行后执行代码,此结果为null数组。应用程序不等待方法来完成执行
我该怎么做,当这种方法完成其工作,然后执行代码的其余部分。
我有一个方法getnamefornumbers
调用基于soap的web服务(sudzc生成),它返回一些数据,我存储在数组中使用。 但问题是,当我调用该方法时,需要花费时间执行并在此方法执行后执行代码,此结果为null数组。应用程序不等待方法来完成执行
我该怎么做,当这种方法完成其工作,然后执行代码的其余部分。
您应该使用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];
});
});
我试过@syncronuis(self){//调用我的方法,但是同样的问题},你能写一个小代码,所以它会更好理解。 –
检查我的更新 – Peres
网络服务是通过sudz在线生成器生成的,所以我不想做出改变,它会花费太多时间..你可以告诉我如何让其余的应用程序等待,直到此方法完成其执行.. –
你必须使用自定义delegates.You应该定义的协议和委托当前类负责c执行getnamefornumbers的lass。一旦操作完成,您应该返回到调用者类。
这里是协议http://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html
我打电话给这个应用程序委托,需要填充在这里,根视图是一个可用视图,我必须在uitableview中显示数据,但所有的工作都在以前完成,Web服务数据收到迟了.. 。使所有的东西出错:( –
在Objective-C的例子中,我建议骆驼符号(getNameForNumbers),otherwiseitisalsmostimpossibletoreadyourmethodnamesjustsayin'。 –