d_CFO
d_CFO

Reputation: 85

unrecognized selector AGAIN

There are LOTS of iphone-related questions of this type. I know; I read them until I wasn't learning anything new, all in an effort to avoid (a) posting and (b) looking mighty green.

@interface CommonCostingClass : NSObject {

}

-(void) theCCC;

@end

That's the whole thing. As minimal as I could make it. I've even resorted to UIView instead of NSObject. Inside CommonCostingClass.m I have

#import "CommonCostingClass.h"

@implementation CommonCostingClass

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

Again, that's all of it. Inside myViewController I coded

#import "CommonCostingClass.h"

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

The presence / absence of the cast makes no difference.

self.view generates
* -[UIView theCCC]: unrecognized selector sent to instance 0x5d3dd20 2010-07-20 11:30:54.732 Wind17[3233:207]
*
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIView theCCC]: unrecognized selector sent to instance 0x5d3dd20'

self generates the same message, with the substitution of "myViewController" for "UIView."

Clean all targets has no effect.

I know that neither UIView nor myView Controller "see" method "theCCC".

I don't know how to say, "It's there! It's there!"

Thank you for the help. Someday this situation will be funny and not embarrassing.

Upvotes: 1

Views: 238

Answers (3)

Seems like you really want

+(void) theCCC;

(note the "+") which is a class method, then you would just call

[CommonCostingClass theCCC]

There really is no mystery to "unrecognized selector" It means the first thing in the brackets (in your case self.view) does not understand (have the method) theCC. And why would it?

You have declared a type of class, but in order to make use of that class you have to have an instance somewhere. So how did you think an instance of CommonCostingClass was ever created?

Upvotes: 1

Jesse Naugher
Jesse Naugher

Reputation: 9820

following the comments, on this line

 [(CommonCostingClass *) self.view theCCC]; 

you are trying to perform -theCCC method on self.view. self.view is a UIView.

If you want your custom class to be a NSObject subclass as you have it now, you need to create and initialize a CommonCostingClass object in your view controller, then call -theCCC on it.

edit for unrecognized selector: Unrecognized selector means you are calling a method on a class that does not implement that method. In your case you are calling theCCC on UIView which does not implement or know of a theCCC method.

Upvotes: 2

kubi
kubi

Reputation: 49384

At least two problems here

  1. If you are going to use CommonCostingClass as a view, it needs to subclass UIView. In the code you're posting, CommonCostingClass is a subclass of NSObject. That could be a typo or it could indicate a much more fundamental issue with what you're trying to do here.
  2. You need to make sure the that view property of your UIViewController is set to be an instance of CommonCostingClass. The easiest way to do this is using Interface Builder.

Upvotes: 1

Related Questions