2014-09-25 63 views
-3

我有一個@property (nonatomic,copy) NSMutableArray* children;,我正在向這個數組添加/刪除項目。NSMutableArray removeObject:引發錯誤

這裏的驚喜:

- (void)addChildDocument:(PPDocument *)doc { 
    [_children addObject:doc]; 
} 

- (void)removeChildDocument:(PPDocument*)doc { 

    [_children removeObject:doc]; 
} 

第一個工作正常。第二個不是。

-[__NSArrayI removeObject:]: unrecognized selector sent to instance 

能否請您給我解釋不清楚是怎麼回事,以及如何children陣列突然顯示爲不變


UPDATE:

的問題已得到解決。然而,儘管可能會引發你的奇怪,但大多數人提到的copy與這個問題無關。奇怪的是,它必須處理每個PPDocumentparent屬性未被正確設置爲weak。一旦我做到了(並且保持原樣),一切正常 - 正如預期的那樣。無論如何,NSMutableArray仍然是可變的。

+0

@Alladinian沒有,它沒有工作。而且,順便說一句,你所說的看起來並不真實。如果'children'作爲不可變對象返回,爲什麼addChildDocument'每次都工作? – 2014-09-25 14:39:55

+0

你可以分享陣列的初始化/分配嗎?另外作爲副本'copy'總是會讓你成爲一個不可變的實例,也許'strong'是更合適的選擇。 – Alladinian 2014-09-25 14:40:23

+0

@ Dr.Kameleon是的,我意識到你直接訪問伊娃並刪除了第一條評論(除非你在某處使用'self.children',並重新分配)。 – Alladinian 2014-09-25 14:41:03

回答

-1

你必須做:

obj.children = @[ @"Some", @"immutable", @"array" ]; 
呼叫之間

-3

您無法刪除您在該方法中添加的內容。你需要給他一個數組索引。

例如,

[_children removeObject:[_children lastObject]];

,如果你知道它會一直陪伴我的最後一個。

如果不是,請提供一個評論,更詳細地解釋對象的位置。

編輯:其實你可能可以做到以下幾點,你也可以嘗試嗎?

[_children removeObjectAtIndex:[_children indexOfObject:doc]];

+2

這與問題無關。 – rmaddy 2014-09-25 14:41:48

+0

我剛試過'NSInteger ind = [_children indexOfObject:doc]; [_children removeObjectAtIndex:ind];'(這幾乎與你所建議的一致,呵呵?),但它不起作用。 – 2014-09-25 14:42:39

+0

是啊,它幾乎是一樣的... 它是一樣的錯誤? 因爲你的數組的確顯示爲不可變的,即使你確實在一個可變的數組上工作。你有沒有嘗試過使用非複製數組? – 2014-09-25 15:00:49