2011-06-07 42 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