Сбой при 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: метод, копируя любое из свойств экземпляра, которые вы считаете необходимыми.

Другие вопросы по тегам