Я создал собственный класс, который соответствует NSCopying
и NSMutableCopying
.Использование -mutableCopyWithZone: на пользовательский класс делает его неизменным
Я добавил реализацию для -copyWithZone:
и -mutableCopyWithZone:
, но всякий раз, когда я называю -mutableCopy
моего объекта и попытаться вызвать другой метод, он выходит из строя, потому что некоторые из Ивар стали неизменны, даже если я называю -mutableCopyWithZone:
на Ивар.
Вот как я копируя мой класс:
MyObject *flipped = [list mutableCopy];
[MyObject flip:flipped];
(код не на +flip:
, потому что он пытается использовать removeObjectAtIndex:
и addObject:
на NSMutableArray
Ивар)
Вот как я копирование класс:
- (id)mutableCopyWithZone:(NSZone *)zone {
id instance = nil;
if ((instance = [[[self class] alloc] init])) {
[instance setArray:[self.array mutableCopyWithZone:zone]];
[instance setObjects:[self.objects mutableCopyWithZone:zone]];
[instance setItemCount:self.itemCount];
}
return instance;
}
Я не знаю, почему это не удается, но я действительно не понимаю, почему он не делает array
и objects
изменчивый.
Любая помощь приветствуется.
«код не работает на + flip :, потому что он пытается использовать removeObjectAtIndex: и addObject: на NSMutableArray ivar» - это действительно «NSMutableArray»? – 2013-02-12 20:24:47
У вас есть свойства массива или объектов, объявленные как 'copy'? –
Это не NSMutableArray во время выполнения, это __NSArrayI, но в коде он определен как NSMutableArray. –