2013-08-28 63 views
2

我正在開發一個iPhone應用程序,我試圖在某些延遲後調用特定的方法。但該方法沒有被調用。我不知道爲什麼它沒有被調用。self performSelector:withObject:afterDelay:不調用方法

這裏是我的代碼

-(void)gettingCommentsList { // some stuff.... 

    [self performSelector:@selector(callGetListInBackgroundMethod) withObject:nil afterDelay:1.0]; } 

-(void)callGetListInBackgroundMethod { 
    isFromthread =YES; 


    NSLog(@"callGetListInBackground"); 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // Add code here to do background processing 
     // 
     // 

     [self gettingCommentsList]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      // Add code here to update the UI/send notifications based on the 
      // results of the background processing 

      [self.commentsTbl reloadData]; 
     }); 
    }); 



} 

感謝

+0

按住Alt鍵並將鼠標懸停在方法上以檢查方法是否被識別。否則調用像'[self performSelector:@selector(callGetListInBackgroundMethod :) withObject:nil afterDelay:0.4];' – user1673099

+0

你確定'performSelector:withObject:afterDelay:'實際上被調用? – sergio

+0

是的,我確定它叫做 – user2185354

回答

0

確保你不叫[NSObject的cancelPreviousPerformRequestsWithTarget:自我]

+0

是的我不打電話 – user2185354

2

一個潛在的問題是,計時器不會阻止線程前退出定時器被解僱。因此,如果運行循環(調用-performSelector:withObject:afterDelay:的線程)沒有其他源(工作),它可能不會繼續運行一秒或更長時間,並且線程將在計時器觸發(並執行您的自定義工作)之前退出。

這當然有可能如果您在輔助線程上安排定時器。

我懷疑這個設計的原因是因爲定時器可能被配置爲循環(或不) - 很多人最終會遇到'殭屍'線程,因爲這些循環定時器永遠不會失效。這個問題很容易咀嚼大量的系統資源。

0

你似乎在呼籲從其他每個方法 -

在gettingCommentList,你叫

[self performSelector:@selector(callGetListInBackgroundMethod) withObject:nil afterDelay:1.0]; 

和callGetListInBackgroundMethod在dispatch_async你叫

[self gettingCommentList]; 

編輯:

嘗試撥打電話一次,看看它是否有效。如果確實如此,那麼可能是在第二次開始之前沒有完成第一個呼叫,因此就是問題所在。讓我知道發生什麼事。

編輯2:

我試過你的代碼。問題是隨後對gettingCommentList的調用是在後臺線程而不是主線程中。所以我這樣做:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Add code here to do background processing 
    //   
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self gettingCommentsList]; 
    }); 
}); 

它的工作原理。但請確保您不會連續調用這兩個函數,因爲這會讓它們始終運行,我確信您並不真正想要:-)

+0

我正在做的是使用soap 。然後解析響應。解析後再次嘗試調用soap,但在單獨的線程中,以便我的應用程序不掛起。但我想在特定時間間隔後致電肥皂 – user2185354

+0

我已更新我的帖子。 –

+0

但我想在後臺調用getsCommentsList方法。如果我在主線程中調用,那麼我的應用程序將掛起 – user2185354

相關問題