我想擺脫我的iPhone應用程序中的一些警告。我得到最多的是當我有一個void函數,我用[self myFunction];來調用它。警告是在我稱之爲函數的行上,它說:「方法'-myFunction'找不到(返回類型默認爲'id')。」我需要做些什麼來解決這個問題?由於我該如何解決此警告:「找不到方法(返回類型默認爲'id')」
14
A
回答
18
聲明函數的頭文件,像這樣:
-(void)myFunction;
或
-(NSString*)myFunction;
-(id)myFunction;
-(NSInteger)myFunction;
-(BOOL)myFunction;
等等等等
這是不僅僅是沉默的編譯器的更多重視:如果函數的返回類型不是指針(id
或anything*
),特別是當它不具有相同的大小時,可能會變得非常奇怪並且很難o發現錯誤。
E.g.如果函數返回一個CGRect
結構,並且編譯器假定爲id
(如警告所述),那麼真正奇怪的事情將會發生。
1
確保您有 - (void)myFunction;在你的頭文件中聲明,並確保myFunction不返回任何東西。
6
您需要在頭文件(.h)(如果它應該對其他類可見)或在實現文件(.m)中定義該函數(如果它對您的類是私有的)。
例如,如果你使用的方法:
-(void)myFunction {
// do something
}
對於「私人」功能,在您.m文件的頂部添加此;之前@implementation MyCoolClass
一行。
@interface MyCoolClass() // <--- no 'category name' hides methods just for this file
-(void)myFunction; // <--- add the method here
-(void)myOtherFunction;
-(void)doSomeCoolThingWithThisString:(NSString *)firstName;
@end
或者如果你想調用其他文件的方法,它加入你的.h文件中,在「接口」部分內;畢竟你的屬性,並在@end之前。
祝你好運!
3
您需要導入包含你的方法
1
只需確保功能在您.m文件的調用者之前放在.h文件! 我不認爲這是做事的正確方法,但它確實消除了所有對我的警告。
而在蘋果的示例代碼中,我沒有看到他們聲明h或m文件中的所有方法。可以直接使用它。
0
確保您使用的對象在其頭文件中聲明瞭此函數。
sky.h
:
@interface sky : object {
}
-(void) doSomething:(int)param;
@end
sky.m
:
#import "sky.h"
@implementation sky
-(void) doSomething:(int)param
{
//dosomething usefull
}
1
我有一個類似的問題彈出對我來說,這是因爲我曾與另一個同名的頭文件在不同的子目錄在我認爲我已經刪除的項目中。這最終導致編譯器認爲該方法沒有在頭中聲明,因爲它在錯誤的頭文件中查找。
2
我決定接下來這個問題:
--file:MyObjectController.h--
#import "MyObject.h"
@interface MyObjectController
{
MyObject * obj;
}
-(void) makeSomething;
@end
--file:MyObjectController.mm--
#import "MyObjectController.h"
@implementation MyObjectController
-(void) makeSomething {}
@end
---文件MyObject.h ----
@class MyObjectController;
@interface MyObject
{
MyObjectController * objController;
}
-(void) callMakeSomethingFromObjController;
@end
---文件MyObject.mm ----
#import "MyObject.h"
#import "MyObjectController.h" //Add this line!!! And compiller will found makeSomething
@implementation MyObject
-(void) callMakeSomethingFromObjController
{
[objController makeSomething];//warning was here:instance method '-makeSomething' not found (return type defaults to 'id')
}
@end
相關問題
- 1. 警告 - 實例方法'-initWithframe:'未找到(返回類型默認爲'id')
- 2. Iphone,我該如何解決此警告:'-respondsToSelector:'找不到協議
- 3. 方法'-cleanTitle'。沒有找到(返回類型默認爲'ID')
- 4. 未找到實例方法'-objectFromJSONString'(返回類型默認爲'id')
- 5. 未找到實例方法(返回類型默認爲id)
- 6. 實例方法'-jsonValue'未找到(返回類型默認爲'id')
- 7. 警告「實例方法'-methodname'找不到(返回類型默認爲'id')」,而它存在並且工作正常
- 8. 找不到方法(返回類型默認爲「身份證」)
- 9. 如何解決這個錯誤?實例方法'-attributesOfItemAtPath:eror:'未找到(返回類型默認爲'id')
- 10. Xcode4:與類別:...類方法...未找到(返回類型默認爲'id')
- 11. 找不到實例方法'-decrytedWithKey'(將默認值返回爲'id')
- 12. 警告:返回類型默認爲「詮釋」 [-Wreturn型]
- 13. 方法'-parseRss:條目'。沒有找到(返回類型默認爲'id')
- 14. 如何解決此警告?
- 15. 類找不到方法的返回類型默認爲「身份證」
- 16. 如何解決此警告:file_get_contents():無法找到包裝「公共」?
- 17. Xcode的警告「 - 方法‘的ImagePath’未找到(返回類型默認爲‘身份證’」
- 18. 我該如何解決r57shell_php_php警告?
- 19. 實例方法「-_setWebGLEnabled:」未找到(返回類型默認爲「身份證」)
- 20. 實例方法未找到(返回類型默認爲「身份證」
- 21. 如何解決此facelets警告消息
- 22. 我該如何解決:沒有找到id爲0x7f0d00aa的視圖?
- 23. 我想傳遞不同的對象到我的方法,如何解決ArrayList是一個原始類型...警告
- 24. 類型系列不能返回RankN類型 - 解決方法或替代方法?
- 25. 如何解決在爲亞馬遜建設時找不到引用類警告?
- 26. C:返回類型默認爲Int
- 27. 如何不返回任何返回類型爲int的方法
- 28. 如何解決有關不兼容指針類型的警告?
- 29. error class method'+ spriteWithFile:rect'not found(返回類型默認爲'id')cocos2d錯誤
- 30. 如何解決分型棄用警告
我建議編輯你的問題,以包括有問題的代碼片段。 – payne 2011-03-13 23:11:48
你可以請你發佈你的方法聲明(.h)和調用代碼嗎? – 2011-03-13 23:12:11
+1爲了解決警告,這是非常好的做法!當你在它的時候,在項目設置中有幾個複選框,你可以讓編譯器警告更多的事情。 – mvds 2011-03-13 23:17:29