• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Convenience initializer not working: "unrecognized selector"
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Convenience initializer not working: "unrecognized selector"


  • Subject: Re: Convenience initializer not working: "unrecognized selector"
  • From: Adam Leonard <email@hidden>
  • Date: Wed, 12 Mar 2008 20:48:36 -0700

Read up on the difference between class and instance methods
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_3_section_3.html#/ /apple_ref/doc/uid/TP30001163-CH12-TPXREF122


And the how memory allocation/initiation works http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Tasks/AllocInitObjects.html

+alloc is a class method that is sent to the meta class instance (Fraction)
Your -initWith:over: is an instance method that can only be sent to a normal instance of your class. +alloc will return this instance, so you will almost always be using a [[MyClass alloc]init....] pattern.


So, the Fraction class does not respond to the selector - initWith:over:, but the object returned by [Fraction alloc] will.

Hope that makes sense! Those little +'s and -'s can be confusing.


Adam Leonard


On Mar 12, 2008, at 8:25 PM, K. Darcy Otto wrote:

I'm trying to create an initializer that allows me to combine initialization and some setting of variables, but I get an error that an "unrecognized selector" has been sent to the object. Here is what I have so far:

Fraction.h:
#import <Cocoa/Cocoa.h>

@interface Fraction : NSObject {

	NSInteger numerator;
	NSInteger denominator;

}

@property(readwrite) NSInteger numerator;
@property(readwrite) NSInteger denominator;

-(id)initWith:(NSInteger)aNumerator over:(NSInteger)aDenominator;

@end

Fraction.m:
#import "Fraction.h"

@implementation Fraction

@synthesize numerator,denominator;

-(id)init
{
	return [self initWith:1 over:1];
}

-(id)initWith:(NSInteger)aNumerator over:(NSInteger)aDenominator
{
	if (self = [super init]){
		self.numerator = aNumerator;
		self.denominator = aDenominator;
	}
	return self;
}

@end

Now, I can do the following with no ill effects:
Fraction *frac = [[Fraction alloc] init];
frac.numerator = 2;
frac.denominator = 2;

But if I do this, I get the unrecognized selector error:
Fraction *frac1 = [Fraction initWith:2 over:2];

Can anyone explain the error or suggest a solution? Thanks.
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >Convenience initializer not working: "unrecognized selector" (From: "K. Darcy Otto" <email@hidden>)

  • Prev by Date: Re: Convenience initializer not working: "unrecognized selector"
  • Next by Date: Re: Mute System
  • Previous by thread: Re: Convenience initializer not working: "unrecognized selector"
  • Next by thread: [Q] How can I repair file name with wrong encoding?
  • Index(es):
    • Date
    • Thread