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 的类接口中声明了switchToNoGridViewgoBack

此警告意味着在您正在调用该方法的实例的类中找不到方法签名;由于 Objective-C 中的消息分发是在运行时完成的,因此这是允许的,但是会显示警告。

【讨论】:

【参考方案2】:

我不太确定您的代码,但我认为您遇到了两个错误之一。要么:

您尚未在 MainView 类声明中声明方法 switchToNoGridViewgoBack。为了让 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

iPhone SDK 警告:MyAppViewController 类未实现“UITabbarDelegate”协议

Xcode (iPhone) 构建警告

从 iphone 相机拍照时收到 iphone 中的内存警告问题

设置基础 SDK 后,iPhone 模拟器在 NSKeyedUnarchiver 中崩溃

MPMoviePlayercontroller 在 iphone SDK 4 中不起作用? - 需要帮助