2013-11-20 43 views
-3

我有一個UIButton,它在按下時將一個整數傳遞給我設置的一個簡單方法。不過,我不斷獲取此錯誤:嘗試將整數傳遞給方法時出現錯誤 - iOS

Implicit conversion of 'int' to 'id' is disallowed with ARC 

這裏是我的代碼:

[self performSelector:@selector(show:) withObject:prev_image afterDelay:2.0]; 

的原因,我不只是在做[self show:prev_image]是因爲我想延遲調用該方法之前。

謝謝你的時間,丹。

+3

的方法簽署和執行,現在讀作performSelector的文檔:withObject:afterDelay:'。 – 2013-11-20 17:46:24

+0

是prev_image一個int? –

+0

是pref_image是一個整數。我只是閱讀performSelector:withObject:afterDelay文檔...所以我怎麼傳遞一個int? – Supertecnoboff

回答

1

prev_image是一個int,其中'對象'必須傳遞到performSelector方法中。

我會建議你這樣做:

[self performSelector:@selector(show:) withObject:@(prev_image) afterDelay:2.0f]; 

我也建議您在Objective-C更改prev_imageprevImage同時編程簡單的風格。

在這裏沒有必要使用dispatch_after,在解決iOS開發中的問題時,您幾乎肯定希望儘可能保持高水平。

我很抱歉不清楚。

你也想改變show:

- (void)show:(NSNumber *)number 
{ 
    NSInteger integerNumber = [number integerValue]; 
} 
+0

這也要求將'show:'方法改爲採用'NSNumber'而不是'int'。關於GCD沒有什麼「低水平」。它實際上比使用'performWithSelector ...'多得多且有用。 – rmaddy

+0

非常棒的解決方案的人!我不會想到這一點。雖然我真的沒有看到使用dispatch_after有任何問題。 – Supertecnoboff

+0

使用dispatch_after沒有問題,但我建議保持高級,因爲解決方案允許。 –

2

你有兩個選擇:

  1. 更改show:方法採取NSNumber,然後在NSNumber
  2. 使用dispatch_after包裹prev_image

代碼:

double delayInSeconds = 2.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [self show:prev_image]; 
}); 
0

一種解決方案是使用[NSNumber numberWithInt:prev_image],而不是prev_image。您還需要將show:方法更改爲採用NSNumber而不是int。

+3

這也要求'show:'方法改爲採用'NSNumber'而不是'int'。 – rmaddy

相關問題