[英]Objective-C: Instance method 'method' is being used on 'Class' which is not in the root class
我收到警告: 實例方法'方法'正在'類'上使用,它不在根類中。
我在靜態方法中調用此方法(在超類中定義)。 當我執行代碼時,我得到運行時錯誤: 無法識別的選擇器發送到類 。
有可能解決這個問題嗎? 是否可以在靜態方法內調用超類方法?
謝謝
編輯 :
兒童班:
@interface ProfileClass : GHAsyncTestCase {}
+ (void)testGHUnitSuccess;
@end
@implementation ProfileClass
+ (void)testGHUnitSuccess {
[self waitForStatus:kGHUnitWaitStatusSuccess timeout:10.0];
}
@end
GHAsyncTestCase是來自GHUnit框架的類。 也許,不可能在靜態方法中調用超類方法。 如果沒有,我將不得不以不同的方式解決它。
解決方案
我已經創建了我的超類的共享實例,並在靜態方法中使用了它。
簡單的答案是否定的。
要調用實例方法,您必須具有要向其發送消息的類的實例。 在靜態方法中,您沒有該類的實例。
因此,您需要將被調用的方法轉換為靜態方法-如果該方法不依賴於實例的任何值,或者在靜態方法中必須創建類的實例(alloc,init等),這應該是可能的。 。
如果沒有看到您的代碼,我們無法提供更具體的方法。
編輯:編輯后,可以看到問題是什么。
在類方法中(+(void)testGHUnitSuccess-注意不是靜態方法),self是沒有實例方法的類。 因此,正如您所說的,您需要用類的實例替換self-在這種情況下是共享實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.