这是我在做什么:

    [imageTag.mediaTags addObject:unitTag];
    [imageTag.allTags addObject:unitTag];

    unitTag.title=@"";
    unitTag.link=@"";
    unitTag.description=@"";
    unitTag.price=@"";
    unitTag.imageLink=@"";


问题是,一旦我执行了第2行之后,存储在数组中的值也会丢失(我使用GDB进行打印并弄清楚了)。现在的事情是,我正在重用unitTag对象输入一些信息,并将该信息保存在数组中。那我有什么选择呢?我需要删除这些值,因为某些值是可选的,并且我不想弄乱。

谁能让我知道吗?谢谢。

最佳答案

如果我理解正确,则需要制作一个UnitTag对象的副本并将其插入到数组中。您只是将对象引用存储在数组中,然后取消引用所使用的值。

addObject不存储副本-它存储实际的对象引用。

要进行复制,您需要创建一个新的单位标记为unitTag的对象,然后添加它。因此,您的代码可能是:

id unitTagCopy = [unitTag createCopy];
[imageTag.mediaTags addObject:unitTagCopy];
[imageTag.allTags addObject:unitTagCopy];


您必须添加createCopy方法。我想可能是:

-(id) createCopy {
    MyObj* obj = [[[MyObj] init] alloc] autorelease];
    obj.title= self.title;
    obj.link= self.link;
    obj.description= self.description;
    obj.price= self.price;
    obj.imageLink= self.imageLink;
    return obj;
}

08-27 19:18