【问题标题】:warnings in iphone sdkiphone 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

如何避免这些警告?

【问题讨论】:

    标签: iphone xcode


    【解决方案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
      猜你喜欢
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 2016-08-27
      • 2019-04-05
      相关资源
      最近更新 更多