2015-07-20 138 views
-2

進行選擇我想要實現這樣的事情與布爾屬性

[self perform Selector:@selector(setEarlierMessagesIsLoading:) withObject:@YES afterDelay:1]; 

但它不能正常工作。爲什麼?可能嗎 ?

解決了與

[self perform Selector:@selector(setEarlierMessagesIsLoading:) withObject:YES afterDelay:1]; 
+0

可能重複(http://stackoverflow.com/questions/7075620/iphone-performselector-with-bool-parameter) – dan

+0

你正在向'setEarlierMessagesIsLoading:'方法 –

+0

發送'NSNumber'實例定義「不能工作」。顯示你的'setEarlierMessagesIsLoading:'方法。解釋發生的事情與你期望發生的事情。 – rmaddy

回答

0

即時猜測你的方法是這樣的:

- (void)setEarlierMessagesIsLoading:(BOOL)isLoading; 

更改爲:

- (void)setEarlierMessagesIsLoading:(NSNumber *)isLoading; 

因爲你是在一個的NSNumber發送*而不是BOOL 。

3

首先,@YES不是BOOL值,它是NSNumber的一個實例。

所以,如果你想獲得一個布爾值,你必須將其轉換爲布爾值。

在您選擇器[iPhone?:performSelector與BOOL參數]的

- (void)setEarlierMessagesIsLoading:(NSNumber *)isLoading { 
    if([isLoading boolValue]) { 
     NSLog(@"Is it loading? YES"); 
    }else { 
     NSLog(@"Is it loading? NO"); 
    } 
} 
+2

不要這樣編碼你的'if/else'。相反,只需做:'if([isLoading boolValue]){// YES} else {// NO}'。切勿直接比較'BOOL'值與'YES'或'NO'。 – rmaddy

+0

@rmaddy謝謝你指出我的不足。你真棒。 – ronan