iphone sdk 中的警告
Posted
技术标签:
【中文标题】iphone sdk 中的警告【英文标题】:warnings in iphone sdk 【发布时间】:2009-07-03 10:02:06 【问题描述】:我收到这两条消息:
警告:“MainView”可能无法响应“-switchToNoGridView” 没有匹配方法签名的消息将被假定返回 'id' 并接受 '...' 作为参数
这里是第一个:
//GridView.m
#import "GridView.h"
#import "MainView.h"
@implementation GridView
-(IBAction)switchToNoGridView
[mainView switchToNoGridView];
@end
第二个:
警告:“MainView”可能不会响应“-goBack” 没有匹配方法签名的消息将被假定返回 'id' 并接受 '...' 作为参数
在这个:
//NoGridView.m
#import "NoGridView.h"
#import "MainView.h"
@implementation NoGridView
-(IBAction)goBack
[mainView goBack];
@end
如何避免这些警告?
【问题讨论】:
【参考方案1】:您是否在MainView
的类接口中声明了switchToNoGridView
和goBack
?
此警告意味着在您正在调用该方法的实例的类中找不到方法签名;由于 Objective-C 中的消息分发是在运行时完成的,因此这是允许的,但是会显示警告。
【讨论】:
【参考方案2】:我不太确定您的代码,但我认为您遇到了两个错误之一。要么:
您尚未在 MainView 类声明中声明方法 switchToNoGridView
或 goBack
。为了让 Xcode 知道一个对象响应一个方法,你必须在类头文件中包含它的定义,像这样:
@interface MainView : ParentObject
// instance variables
// properties
- (void)switchToNoGridView;
- (void)goBack;
@end
这假设您实际上想要将它们声明为 (void)
,当然 - 它们可以有返回值,但是由于您不对代码中的调用结果做任何事情,我假设它们是空白。或者:
您的意思是调用 MainView 类,而不是 mainView
对象。 因为我们看不到 GridView.h 的属性或实例变量定义,也看不到当前的方法声明在 MainView.h 中,您可能在 MainView 上声明了静态方法 +(void)switchToNoGridView
和 +(void)goBack
,但您在 MainView 的实例 mainView
上调用它。例如:
@interface AClass : NSObject
+ (void)doSomething;
@end
@implementation AClass
+ (void)doSomething
NSLog(@"Doing something");
@end
#import "AClass.h"
@interface AnotherClass : NSObject
AClass *aClass;
@property(nonatomic,retain) AClass *aClass;
- (void)doSomethingElse;
@end
@implementation AnotherClass
- (void)doSomethingElse
[aClass doSomething]; // This will break at runtime
[AClass doSomething]; // but this won't
@end
基本上,您可能将类方法与对象方法混淆了。无论哪种方式,您都应该检查您的 MainView 头文件以获取适当的方法定义。
【讨论】:
这是我的 MainView: //MainView #import "MainView.h" #import "GridView.h" #import "NoGridView.h" @implementation MainView -(void)awakeFromNib [self addSubview:网格视图]; [自我添加子视图:信息视图]; -(void)switchToNoGridView [gridView removeFromSuperview]; [自我 addSubview:nogridView]; -(void)goBack [nogridView removeFromSuperview]; [自我 addSubview:gridView]; @end以上是关于iphone sdk 中的警告的主要内容,如果未能解决你的问题,请参考以下文章
iPhone SDK 警告:MyAppViewController 类未实现“UITabbarDelegate”协议
从 iphone 相机拍照时收到 iphone 中的内存警告问题