Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

-[MyClassName copyWithZone:] unrecognized selector sent to instance

Your -setObj1: method is declared as copy, so it calls -copy on your Class1 object. -copy just calls -copyWithZone:nil. So you either need to implement the NSCopying protocol (which means implementing -copyWithZone:), or change your property from copy to retain.


To make your class respond to copyWithZone:, you have to implement the NSCopying protocol in your class. And you must override the copyWithZone: method.

For example:

First you have to implement the NSCopying protocol in your interface declaration.

@interface MyObject : NSObject <NSCopying>

Then override the copyWithZone method like,

- (id)copyWithZone:(NSZone *)zone
{
    id copy = [[[self class] alloc] init];

    if (copy)
    {
        // Copy NSObject subclasses
        [copy setVendorID:[[self.vendorID copyWithZone:zone] autorelease]];
        [copy setAvailableCars:[[self.availableCars copyWithZone:zone] autorelease]];

        // Set primitives
        [copy setAtAirport:self.atAirport];
    }

    return copy;
}

I am glad if this helps you.

(Reference)