2012-12-04 22 views
1

所以,我試圖在另一個對象中調用方法,並將調用對象作爲調用的一部分傳遞。可能是我架構,它只是沒有任何意義的方式,但無論如何,這裏的電話:Objective-C:編譯器錯誤將自身傳遞給選擇器中的方法

NSTimer *refreshTimer = [NSTimer 
         scheduledTimerWithTimeInterval:[timerDate timeIntervalSinceNow] 
         target:otherObject 
         selector:@selector(methodBeingCalled:self) 
         userInfo:nil 
         repeats:NO]; 

和接收方法具有以下特徵:

- (void)methodBeingCalled:(id)sender; 

當我這樣做,我得到呼叫中出現錯誤,說「預計錯誤」:'「。這對我來說沒有意義,因爲我在那裏有一個冒號來傳遞「self」作爲參數。

我是否正確使用選擇器?我應該使用NSInvocation嗎?

回答

4

你不能設置那樣的參數。選擇器只定義簽名以及函數具有多少個參數。刪除self,因爲你不能發送它。如果你想通過self,請在userInfo。將出現在NSTimer方法中的對象本身是NSTimer

P.S. Documentation是你的朋友。它清楚地說明了(對於選擇器參數):「選擇器必須對應於返回void並接受單個參數的方法。計時器將自身作爲參數傳遞給此方法。」

+0

太棒了,謝謝你的提示。 所以,如果我理解正確,只是做@selector(methodBeingCalled :)會將Timer對象本身發送給methodBeingCalled? –

+0

是的,這是正確的 – borrrden

+0

很酷。再次感謝! –

相關問題