应用程序不等待方法完成执行

时间:2012-07-02 08:32:31

标签: objective-c ios

我有一个方法getnamefornumbers,它调用基于肥皂的Web服务(sudzc生成),它返回一些我存储在数组中的数据以供使用。 但问题是,当我调用方法时,它会花费时间执行并在此方法执行后进行编码,这会导致null数组。

当这个方法完成它的工作时,我能做什么,然后执行其余的代码。

2 个答案:

答案 0 :(得分:0)

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

  1. 您拨打电话(以异步方式)
  2. 应用程序一直在运行(在您执行1.之后继续执行其他指令)
  3. 所以你必须有两个解决方案,让它同步,所以你只会在答案到来之后继续(在你的情况下阵列被填满),我可能会不鼓励。或者,将其设为异步,并在实际使用时使用该数组。

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


    更新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

的示例