Reputation: 26223
I a trying to make a mutableCopy of a planet object that contains 5 instance variables (one of them being an NSMutableArray of string literals. My problem is that I am unsure how to set the newPlanet>data to a copy of self>data, does that make sense?
-(id) mutableCopyWithZone: (NSZone *) zone {
Planet *newPlanet = [[Planet allocWithZone:zone] init];
NSLog(@"_mutableCopy: %@", [newPlanet self]);
[newPlanet setName:name];
[newPlanet setType:type];
[newPlanet setMass:mass];
[newPlanet setIndex:index];
// NSMutableArray *data; HOW TO: newPlanet>data = self>data?
return(newPlanet);
}
Based on the comments by Chuck & bbum I updated my method and added the following ...
@property(retain) NSMutableArray *data;
@synthesize data;
.
-(id) mutableCopyWithZone: (NSZone *) zone {
Planet *newPlanet = [[Planet allocWithZone:zone] init];
NSLog(@"_mutableCopy: %@", [newPlanet self]);
[newPlanet setName:name];
[newPlanet setType:type];
[newPlanet setMass:mass];
[newPlanet setIndex:index];
NSMutableArray *copiedArray = [[self data] mutableCopyWithZone:zone];
[newPlanet setData: copiedArray];
[copiedArray release];
return(newPlanet);
}
much appreciated
gary
Upvotes: 3
Views: 2188
Reputation: 237060
Nothing too special here. Something like this:
NSMutableArray *copiedData = [[self data] mutableCopyWithZone:zone];
newPlanet.data = copiedData;
[copiedData release];
Upvotes: 6
Reputation: 1866
You probably want
newPlanet->data = [data mutableCopyWithZone:zone];
Be aware that if you use a setter (such as dot-access, or setData:
), then you will be triggering another retain, so you should handle that appropriately.
Upvotes: 2
Reputation: 2394
Did you try something like [newPlanet setData:[[self data] mutableCopyWithZone:zone]];
?
Upvotes: 0