2011-06-07 21 views
0

这里的变量是我在做什么:一些问题,在Objective-C

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

    [email protected]""; 
    [email protected]""; 
    [email protected]""; 
    [email protected]""; 
    [email protected]""; 

的问题是,一旦我做执行超越2号线,存储在阵列中的值丢失太多(我用GDB打印并计算出来)。现在,我正在重新使用unitTag对象来输入一些信息并将该信息保存在数组中。那么我有什么选择?我需要删除值,因为一些值是可选的,我不想搞砸了。

任何人都可以请让我知道吗?谢谢。

+0

'imageTag.mediaTags'和'imageTag.allTags'可能'nil'? – ughoavgfhw 2011-06-07 02:53:25

+0

好吧,“addObject”完成后,我打印“objectAtIndex”并获取值。 imageTag是初始化的NSMutableArray。它只在执行最后5行后得到 thingy :( – Ahsan 2011-06-07 02:55:50

回答

1

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

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

要创建副本,您需要创建一个新的objectTag,然后添加它。因此,您的代码可能是:

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; 
} 
+0

@SB:我该怎么做?有什么帮助吗? – Ahsan 2011-06-07 02:56:13

+0

我已经更新了答案,createCopy方法将放入MyObj中。 m文件我假设unitTag的类型为MyObj – 2011-06-07 03:02:40

+0

请注意,有一个协议:'NSCopying'。 – 2011-06-07 03:05:33