无法识别的选择器AGAIN

时间:2010-07-20 17:19:51

标签: iphone objective-c

此类型中有很多与iphone相关的问题。我知道;我读了它们,直到我没有学到任何新东西,都是为了避免(a)发布和(b)看起来强大的绿色。

@interface CommonCostingClass : NSObject {

}

-(void) theCCC;

@end

这就是整件事。尽可能少。我甚至使用了UIView而不是NSObject。在CommonCostingClass.m里面我有

#import "CommonCostingClass.h"

@implementation CommonCostingClass

-(void) theCCC {
    // blah-blah
}

同样,这就是全部。在我编写的myViewController里面

#import "CommonCostingClass.h"

- (BOOL) textFieldShouldReturn:(UITextField *)textField {
    if (textField.tag == 4) {
        [(CommonCostingClass *) self.view theCCC];  // <-ka-boom
    }
    // other stuff
}

演员的存在/不存在没有区别。

self.view生成
     * - [UIView theCCC]:无法识别的选择器发送到实例0x5d3dd20 2010-07-20 11:30:54.732 Wind17 [3233:207]
    *
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** - [UIView theCCC]:无法识别的选择器发送到实例0x5d3dd20'

self生成相同的消息,将“myViewController”替换为“UIView”。

清除所有目标无效。

我知道UIView和myView Controller都没有“看到”方法“theCCC”。

我不知道怎么说,“它就在那里!它就在那里!”

感谢您的帮助。总有一天,这种情况会很有趣,而不是令人尴尬。

3 个答案:

答案 0 :(得分:2)

在评论之后,在这一行

 [(CommonCostingClass *) self.view theCCC]; 

你正试图在self.view上执行-CCC方法。 self.view是一个UIView。

如果您希望自定义类是现在的NSObject子类,则需要在视图控制器中创建并初始化CommonCostingClass对象,然后在其上调用-CCC。

编辑无法识别的选择器:无法识别的选择器意味着您正在调用未实现该方法的类的方法。在您的情况下,您在theCCC上致电UIView,但未实施或了解theCCC方法。

答案 1 :(得分:1)

这里至少有两个问题

  1. 如果您要将CommonCostingClass用作视图,则需要子类UIView。在您发布的代码中,CommonCostingClassNSObject的子类。这可能是一个错字,或者它可能表明你在这里尝试做的更为根本的问题。
  2. 您需要确保view的{​​{1}}属性设置为UIViewController的实例。最简单的方法是using Interface Builder

答案 2 :(得分:1)

好像你真的想要

+(void) theCCC;

(注意“+”)这是一个类方法,然后你只需要调用

[CommonCostingClass theCCC]

“无法识别的选择器”确实没有神秘感。这意味着括号中的第一件事(在你的情况下是self.view)不理解(有方法)theCC。为什么会这样呢?

您已经声明了一种类,但为了使用该类,您必须在某处拥有一个实例。那你怎么认为CommonCostingClass的实例曾经被创造过?