Мне удалось выяснить это:
Я изменил класс Gene на:
@interface Gene : NSObject
{
Allele * first;
Allele * second;
}
Мне нужно было также создавать копии добавленных мною объектов, а также дочерних объектовнеобходимо подтвердить протокол копирования:
-(id) copyWithZone:(NSZone*) zone
{
id clonedGene = [[[self class] allocWithZone:zone] initWithAllele1:[first copy] andAllele2:[second copy]];
return clonedGene;
}
, поэтому мне пришлось определить также метод
-(id) copyWithZone:(NSZone*) zone;
в классе Allele:
-(id) copyWithZone:(NSZone*) zone
{
id copiedAllele = [[[self class] allocWithZone:zone] initWithAllele:allele];
return copiedAllele;
}
и потомуАллель относится к типу перечисления, ему не нужен реализованный метод более глубокого копирования (так как это базовый тип).
Поэтому, если я хочу реализовать метод глубокого копирования, я должен убедиться, что всеклассы, используемые в качестве атрибутов, также имеют встроенную функцию копирования.
Спасибо за помощь, надеюсь, хорошо, что я ответил на свой вопрос.
С уважением