2012-07-02 63 views
0

我有一个方法getnamefornumbers调用基于soap的web服务(sudzc生成),它返回一些数据,我存储在数组中使用。 但问题是,当我调用该方法时,需要花费时间执行并在此方法执行后执行代码,此结果为null数组。应用程序不等待方法来完成执行

我该怎么做,当这种方法完成其工作,然后执行代码的其余部分。

+2

在Objective-C的例子中,我建议骆驼符号(getNameForNumbers),otherwiseitisalsmostimpossibletoreadyourmethodnamesjustsayin'。 –

回答

0

您应该使用NSURLConnection委派方法。在异步环境,是正常行为:

  1. 您拨打一个电话(以异步方式)
  2. 应用程序继续运行(您做出1.调用的程序继续进行的其他指示后)

所以你必须有两个解决方案,使它同步,所以你只会在答案出来后继续(在你的情况下数组被填充),我可能会不鼓励。或者,您将其设为异步,并在实际拥有该数组时使用该数组。

至于具体如何实现这一点,必须提供更多的细节,以便我建议你。


更新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]; 
     }); 
     }); 
+0

我试过@syncronuis(self){//调用我的方法,但是同样的问题},你能写一个小代码,所以它会更好理解。 –

+0

检查我的更新 – Peres

+0

网络服务是通过sudz在线生成器生成的,所以我不想做出改变,它会花费太多时间..你可以告诉我如何让其余的应用程序等待,直到此方法完成其执行.. –

0

你必须使用自定义delegates.You应该定义的协议和委托当前类负责c执行getnamefornumbers的lass。一旦操作完成,您应该返回到调用者类。

这里是协议http://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

+0

我打电话给这个应用程序委托,需要填充在这里,根视图是一个可用视图,我必须在uitableview中显示数据,但所有的工作都在以前完成,Web服务数据收到迟了.. 。使所有的东西出错:( –