0

私は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]);

オブジェクトが削除されない理由がわかりません。それは私が要点を逃しているようなものです。

4

2 に答える 2

2

self.currentScene.elementsは配列です。つまり、その配列を内部に持つ新しい配列を作成しているのです。の唯一のアイテムはnewArrayですself.currentScene.elements。の可変コピーを作成する場合はself.currentScene.elements、を使用しますmutableCopy

于 2012-06-27T18:35:45.863 に答える
1

別の配列である1つのオブジェクトを含む配列があります。newElements有効なインデックスは1つだけで、それはです0。最初の行を次のように変更する必要があります

NSMutableArray *newElements = [[self.currentScene.elements mutableCopy] autorelease];
于 2012-06-27T18:35:21.327 に答える