2013-03-21 78 views
0

我們在我們的應用程序中有地址簿功能,聯繫人存儲在NSMutableArray中。我如何更新NSMutableArray,如果它與其他NSMutableArray初始化

具有被從外部訪問聯繫人單獨的一類,所以我喜歡

下面

在新的類初始化...

self.newListdata = [address_book_window listData]; 

現在我的新一類是能夠使用訪問所有接觸newListdata,聯繫人數量還

匹配。在一種情況下,如果在運行時從地址簿中刪除的任何聯繫人,新

類newListdata也需要更新,但它沒有更新,因爲我以爲。計數爲

也未更新。難道我做錯什麼,我需要手動刪除的聯繫人在

newListdata也。爲什麼,因爲我指着

地址簿列表data.I它不與通訊錄同步接觸已經學習目標C,所以如果有人能夠幫助這將是

有用。謝謝。

+0

你的「'newListdata'」屬性是如何聲明的? – 2013-03-21 11:41:06

+0

你是否像單獨一樣同步課程? – 2013-03-21 11:41:22

+0

@MichaelDautermann屬性(強,非原子)NSMutableArray * newListdata; – Newbee 2013-03-21 11:44:36

回答

1

比較,如果newListdata和[address_book_window listData]是相同的指針(相同的對象)。

printf("compare %f and %f", newlistdata, [address_book_window listData]) 

它們應該是相同的地址存儲。

注意:因爲我不知道你是如何實現你的代碼的,因爲listData被封裝,所以address_book_window不保證listData總是在同一個地址存儲器(如果你使用一個新的列表數據)。所以newListData可能會指向一個懸掛指針。保持這樣一個對象的軌道

最好的辦法是通過觀察者模式,或志願如果你能。由於他們很長的解釋,谷歌它;)

1

如果你有2個NSMutableArrays他們有相同的對象強引用,但它們是兩個獨特的對象(它們是2個MutableArrays),這種情況下比如當你創建一個NSMutableArray arrayWithArray:

,如果你有1數組和2個引用,當你刪除或添加對象時,它是一個單獨的對象,所以你用哪個引用來訪問它並不重要,它會像你提到的那樣處於「同步」狀態(說同步不正確因爲事實上,他們是1個單一對象)

在你的情況可能的ListData返回在這種情況下,一個新的數組,包含到同一對象的引用,當你從一個陣列,山高刪除對象nd仍然會保留它(對象不會被釋放),2個數組將會不同。

+0

getter方法將被調用,正如您上面提到的,它會返回新的數組?如果是這樣,我怎麼修改我的代碼,只返回它的引用。 – Newbee 2013-03-21 11:52:21