Сбой при CopyWithZone: метод
Я создал один класс, который является подклассом NSObject(nsme как GroupClass). В этом классе я создал одно свойство, которое принадлежит из 'id', например
@property(nonatomic,retain)id myObj;
Теперь я стою на пути, где у меня есть один изменяемый массив, этот массив содержит экземпляры моего GroupClass. Поэтому я получаю одну копию аналогичным образом
GroupClass* objG=[array objectAtIndex:i];
Теперь я хочу получить еще одну копию objG. Я искал. И я нашел NSCopying Protocol. Поэтому я добавил в качестве делегата NSCopying в GroupClass, а также добавил метод copyWithZone. Вот он
-(id)copyWithZone:(NSZone *)zone
{
GroupClass *copy = [[[self class] allocWithZone: zone] init];
copy.myObj=[myObj copyWithZone: zone];
return copy;
}
Здесь мне нужно глубокое копирование. Но он всегда падает после строки выделения. Пожалуйста, помогите мне. Спасибо.
1 ответ
Не все NSObject
подклассы принимают NSCopying
протокол. Проблема звучит так, как будто вы отправляете это сообщение объекту, который его не распознает.
Неважно, что ваш GroupClass
принимает NSCopying
, Это не проблема. Вы вызываете copyWithZone: на myObj, что бы это ни было.
Эта строка кода:
copy.myObj=[myObj copyWithZone: zone];
Это почти наверняка, что вызывает аварию.
РЕДАКТИРОВАТЬ
Не зная, что такое myObj, я бы порекомендовал вам, если это возможно, и это неплохая идея, чтобы вы подклассировали, какой бы ни был класс.
Если это, например, UIView, я бы подкласс его так:
@class JVView : UIView <NSCopying>
Я бы тогда реализовал copyWithZone:
метод, копируя любое из свойств экземпляра, которые вы считаете необходимыми.