2014-07-21 42 views
0

我已經使用下面的代碼與Web服務器進行同步。它正在工作,但由於getUnsyncTicketsFromServer方法在主隊列中調用,UI會暫時凍結。我試圖在單獨的隊列中做到這一點。然後它不調用委託方法(requestReturnedData)。使用單獨線程時,委託方法不會調用

[NSTimer scheduledTimerWithTimeInterval:320.0 target:self selector:@selector(syncTickets) userInfo:nil repeats:YES]; 

-(void)syncTickets{ 

    [self sendUnsyncedTickets]; 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 6 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 6 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
      [self getUnsyncTicketsFromServer]; 
     }); 
    }); 


}  

-(void)requestReturnedData:(NSData *)data{ 

} 

編輯 -

-(void)getUnsyncTicketsFromServer{ 

    ServiceConnector *serviceConnector = [[ServiceConnector alloc] init]; 
    serviceConnector.delegate = self; 
    [serviceConnector getTicketsFromServer]; 
    dataMethod = @"get"; 

} 
+0

你在哪裏調用requestReturnedData?你在哪裏設置代表? – Ryan

+0

@trick你可以檢查編輯。 – Susitha

+0

嘗試在該單獨的線程上運行異步的東西,並通過運行dispatch_async(dispatch_get_main_queue()...調用委託方法...' – brandonscript

回答

3
@implementation YourClass() { 
    ServiceConnector *_serviceConnector; 
} 

... 

-(void)getUnsyncTicketsFromServer { 
    _serviceConnector = [[ServiceConnector alloc] init]; 
    _serviceConnector.delegate = self; 
    [_serviceConnector getTicketsFromServer]; 
    dataMethod = @"get"; 
} 

如果使用的是弧線,我覺得你的serviceConnector必須得到釋放,所以存儲對象作爲實例變量。