2011-07-18 16 views
4

說,我想從輔助類方法調用UIActionSheet。我希望助手類(不是對象)成爲此操作表的代表。 所以我將自己傳遞給委託人。使用類方法將代表設置爲「self」

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"MyTitle" 
                 delegate:self 
               cancelButtonTitle:nil 
              destructiveButtonTitle:@"Delete" 
               otherButtonTitles:nil]; 

我的助手類實現委託方法作爲類方法,一切工作正常。 但是,我從編譯器那裏得到一個警告,說不兼容的指針,當預期id時發送Class。我也嘗試過[自我教學]並得到相同的警告。

如何避免此警告?

+0

在Objective-C加入< UIActionSheetDelegate>解決它,這些被稱爲「類方法」,而不是「靜態方法」。這可能會幫助您在將來尋求幫助。 :) –

+0

謝謝。我編碼切換Objective-C和C#。無法避免錯別字。 – Mugunth

+0

謝謝。我編碼切換Objective-C和C#。無法避免錯別字。 – Mugunth

回答

9

只需將代表設置爲[self self]即可。

+0

謝謝。它有效,但它是如何工作的? – Mugunth

+0

我其實並不完全確定,但由於'self'是一個指向當前對象的指針,它將收回消息,所以將'Class'對象掩蓋爲'self'指針會讓編譯器放心。這只是一個編譯器的東西,但;使用'self'可以正常工作,但編譯器的警告會讓你發瘋。 –

+0

「謝謝,它有效,但它是如何工作的?」 - >這是一個很好的程序員的堅實標誌。 – scaryguy

0

直到你將一個對象指針傳遞給該方法,你纔會發出警告。它期望id,你給Class這是一個typedef struct objc_class *Class;

7

您可以通過將自我強制轉換爲類型id來擺脫警告。

[[UIActionSheet alloc] initWithTitle:@"MyTitle" 
          delegate:(id<UIActionSheetDelegate>)self 
        cancelButtonTitle:nil 
       destructiveButtonTitle:@"Delete" 
        otherButtonTitles:nil]; 

這將告訴編譯器把該值作爲id這符合UIActionSheetDelegate協議。

+0

無論如何要在SWIFT中做到這一點? – BaSha

相關問題