Вопросы о дублировании последнего объекта NSArray - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть NSArray из MyObjects.

Я хочу продублировать последний объект моего массива. Другими словами, я хочу добавить новый объект в массив, который точно такой же, как и в предыдущем.

Я пытался с:

id object = [[self arrangedObjects] lastObject]; 
id newObject = [object copy];

Но я понял, что не могу использовать метод копирования, потому что он не реализован в NSObject.

Должен ли я реализовать метод copy в классе MyObject, возвращая новый экземпляр MyObject и изменив код следующим образом:

MyObject object = [[self arrangedObjects] lastObject]; 
MyObject newObject = [object copy];

Или есть другие растворимые вещества?

UPDATE Из документации NSObject

NSObject не поддерживает сам протокол NSCopying. Подклассы должен поддерживать протокол и реализовывать метод copyWithZone:. версия подкласса copyWithZone: метод должен отправить сообщение супер сначала, чтобы включить его реализацию, если подкласс происходит непосредственно от NSObject.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Если ваши объекты - NSObject, вы можете создать новую категорию NSObject, которая реализует протокол NSCopying. Обязательно переберите все ключи и скопируйте их значение в новый объект. Для глубокого копирования вы также должны вызывать «copy» для каждого из его значений.

Если ваш объект нестандартный, реализуйте протокол в своем классе.

Если у вас есть смешанные объекты в массиве, все они должны реализовать протокол NSCopying, поэтому вы можете использовать id <NSCopying>, когда объявляете их, чтобы избежать предупреждения / ошибки во время компиляции.

0 голосов
/ 26 сентября 2011

Насколько я знаю, если вы хотите скопировать объект, реализуйте протокол NSCopying , который позволяет использовать метод NSObject - (id)copy.

В методе - (id)copyWithZone:(NSZone *)zone выделите новый объект, используя + (id)allocWithZone:(NSZone *)zone, затем скопируйте его члены, обновите его состояния и т. Д.

...