我有一个我指定的NSMutableArray:
NSMutableArray *newElements = [[NSMutableArray alloc] initWithObjects:self.currentScene.elements, nil];
//selectedElement is assigned somewhere above this, shouldn't be relevant since it's the same object as the one in the array
int indexToRemove = [self.currentScene.elements indexOfObject:selectedElement];
我正从此数组中删除selectedElement
,但在调试器中看到了一些奇怪的行为。初始化数组后,通过在删除selectedElement
之前设置断点,我看到了:
po newElements
(NSMutableArray *) $2 = 0x08c74e90 <__NSArrayM 0x8c74e90>(
<__NSArrayM 0x8c52e60>(
<StoryTextElement: 0x12ac6e00>,
<StoryTextElement: 0x8ca1a50>
)
)
(lldb) po selectedElement
(StoryElement *) $3 = 0x08ca1a50 <StoryTextElement: 0x8ca1a50>
我试图用:删除对象:
NSLog(@"count: %d", [newElements count]); // prints count: 1
[newElements removeObject:selectedElement];
NSLog(@"count: %d", [newElements count]); // prints count: 1
[newElements removeObjectAtIndex:indexToRemove]; // throws an exception. indexToRemove is 1 in the debugger
NSLog(@"count: %d", [newElements count]);
我不明白为什么我的对象没有删除。这就像我错过了这一点。
答案 0 :(得分:2)
self.currentScene.elements
是一个数组。所以你要创建一个包含该数组的新数组。 newArray
中唯一的项目是self.currentScene.elements
。如果您要创建self.currentScene.elements
的可变副本,请使用mutableCopy
。
答案 1 :(得分:1)
您有一个包含一个对象的数组,这是另一个数组。 newElements
只有一个有效索引,即0
。您需要将第一行更改为
NSMutableArray *newElements = [[self.currentScene.elements mutableCopy] autorelease];