Вы сохраняете один и тот же объект 5 раз в своем массиве.Вы, похоже, ошибаетесь, что -addObject:
скопирует объект, который ему передали, но это не так.Простое исправление состоит в том, чтобы изменить ваши -addObject:
строки на
[codes addObject:[[listItem copy] autorelease]];
Это, конечно, при условии, что ваш класс TableList
соответствует <NSCopying>
.Если этого не произойдет, вы, вероятно, захотите это сделать.Если вы не хотите поддерживать копирование в этом классе, вам придется каждый раз создавать новый TableList
объект.
Кроме того, если вы не используете ARC, вы пропускаете свой TableList
object.
Для поддержки -copy
вы должны соответствовать <NSCopying>
, который является протоколом, который объявляет метод -copyWithZone:
(хотя аргумент зоны - это историческое любопытство, которое должнобыть проигнорированным).Для этого измените строку @interface
так, чтобы она выглядела как
@interface TableList : NSObject <NSCopying>
, а затем реализуйте метод -copyWithZone:
- (id)copyWithZone:(NSZone *)zone {
// If our superclass conformed to <NSCopying> we'd call [super copy]
// But it doesn't, so alloc/init a new instance
TableList *newObj = [[TableList alloc] init];
newObj.codeTitle = self.codeTitle;
newObj.codeNumber = self.codeNumber;
newObj.codeDescription = self.codeDescription;
return newObj;
}
Это всего лишь пример реализации.Предполагается, что эти 3 свойства являются единственными значениями объекта, и что уместно просто присвоить этому свойству.Если у вас есть внутренние ivars, которые нужно скопировать, вы можете получить доступ к ivar, используя что-то вроде
newObj->ivar = copyIvar(self->ivar); // self->ivar is the same as just plain ivar