簡體   English   中英

Objective-C:實例方法'方法'用於不在根類中的'Class'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM