2012-11-21 118 views
-1

當我試着使用performSelectorOnMainThread此更改按鈕的隱藏價值的作品:布爾值轉換在IOS

[pictureButton performSelectorOnMainThread:@selector(setHidden:) withObject:NO waitUntilDone:YES]; 

但這:

[pictureButton performSelectorOnMainThread:@selector(setHidden:) withObject:YES waitUntilDone:YES]; 

給出了這樣的錯誤:

Cannot initialize a parameter of type 'id' with an rvalue of type 'signed char' 

發生這種錯誤會發生什麼樣的內部轉換?我該如何解決這個問題?

+0

讀取(NULL)指針的時間... – 2012-11-21 17:22:38

回答

4

該參數被命名爲withObject:。 BOOL不是一個對象,但可以傳入nil,而NO與它相同,因此您的第一個示例可以正常工作(偶然)。

您有幾個選擇,但最簡單的可能是使用GCD並改爲在主線程的塊中執行setHidden:方法。

0

如果你做這個測試:

NSArray *array = [NSArray arrayWithObjects:@"a", NO, @"b", nil]; 
NSLog("%@", array); 

你會發現,在數組中只有一個對象「A」,這意味着布爾值NO等於nil。所以實際上你的工作代碼是這樣的

[pictureButton performSelectorOnMainThread:@selector(setHidden:) withObject:nil waitUntilDone:YES]; 

這是可以接受的。

實際上,如果你做這個測試:

NSArray *array = [NSArray arrayWithObjects:@"a", [NSNumber numberWithBool:NO], @"b", nil]; 
NSLog("%@", array); 

,你會發現有三個對象數組: 「A」, 「0」 和 「B」。 所以在你的代碼,你應該這樣調用:

[pictureButton performSelectorOnMainThread:@selector(setHidden:) withObject:[NSNumber numberWithBool:YES/NO] waitUntilDone:YES]; 

希望幫助!

1

在performSelector方法中,您必須傳遞一個對象,如jrturton答案中所述。 但是...... BOOL類型不是原始類型有關BOOL

這裏更多的信息:http://weblog.bignerdranch.com/564-bools-sharp-corners/

您可以使用這一招

[pictureButton performSelectorOnMainThread:@selector(setHidden:) withObject:nil waitUntilDone:YES]; // this is a setHidden:NO 

[pictureButton performSelectorOnMainThread:@selector(setHidden:) withObject:self waitUntilDone:YES]; // this is a setHidden:YES 

我用自己的,但你可以使用任何現有目的。這將是真實的。