2012-01-26 4 views
2

У меня есть объект со свойствами NSString, UIImageView и простыми vars типа BOOL, int и float.Объекты с глубоким копированием Objective C с UIImageView как свойство

Я пытаюсь создать глубокую копию объекта. Для этого я реализовал протокол NSCopying в мой класс и метод copyWithZone как:

-(id)copyWithZone:(NSZone *)zone 
{ 
    iItem *clone = [[iItem alloc] init]; 

    //iItem *clone = [super copyWithZone:zone]; 

    clone.originalTransform = self.originalTransform; 
    clone.initialTransform = self.initialTransform; 
    clone.originalFrame = self.originalFrame; 

    clone.zOrder = self.zOrder; 
    clone.itemId = self.itemId; 
    clone.itemIdColor = self.itemIdColor; 
    clone.itemIdTexture = self.itemIdTexture; 
    clone.itemIdStyle = self.itemIdStyle; 
    clone.textureLevel = self.textureLevel; 
    clone.currentSizePercent = self.currentSizePercent; 
    clone.holdItem = self.holdItem; 
    clone.isInverted = self.isInverted; 
    clone.delegate = self.delegate; 
    clone.mergedFrame = self.mergedFrame; 

    clone.selectedMergeView = [self.selectedMergeView copy]; 

    clone.ScaleFactorScreen = self.ScaleFactorScreen; 

    clone.selectedFrameView = [self.selectedFrameView copy]; 
    clone.selectedFrame = [self.selectedFrame copy]; 
    clone.frameBeforeMovement = self.frameBeforeMovement; 

    //clone.touchBeginPoints = CFDictionaryCreateMutable(NULL, 0, NULL, NULL); 
    clone.touchBeginPoints = CFDictionaryCreateMutableCopy(NULL, 0, self.touchBeginPoints); 

    clone.contentMode = UIViewContentModeScaleAspectFit; 
    clone.animationImages = self.animationImages; 
    clone.image = [self.image copy]; 
    clone.animationDuration = self.animationDuration; 
    clone.animationRepeatCount = self.animationRepeatCount; 
    [clone startAnimating]; 


    clone.transform = self.transform; 

    clone.frame = self.frame; 

    clone.userInteractionEnabled = YES; 
    clone.multipleTouchEnabled = YES; 

    return clone; 
} 

Класс iItem наследует от класса UIImageView, поэтому я попытался назвать супер copyWithZone, но я получаю сообщение об ошибке. И для объектов UIImageView, которые я пытаюсь клонировать, я получаю сообщение SIGABRT '- [UIImageView copyWithZone:]: нераспознанный селектор, отправленный в экземпляр 0x210f50'.

Как сделать глубокую копию объекта с UIImageViews, NSString и простыми vars?

Спасибо.

ответ

0

Я думаю, что вы все делаете правильно, выполняйте селектор «копировать» на объектах, которые реализуют NSCopying, и вручную устанавливают свойства (например, вы сделали для изображения, режим содержимого и т. Д.) Для тех, кто этого не делает.

+0

Но когда выполняется первый экземпляр злоумышленником UIImageView, я получаю сообщение SIGABRT. – NemeSys

+0

Какая ошибка? Копировать можно только на своих дочерних классах, а не на общем UIImageView .... –

0

Самый простой путь к архиву с NSKeyedArchiver и разархивировать к NSKeyedUnarchiver предполагая, что ваши объекты соответствуют NSCoder

+0

UIImageView не соответствует NSCoder. – ninjaneer

-1

Во-первых, начать с этой

iItem *clone =[[iItem allocWithZone:zone ] init];