저는 최근에 소프트웨어 개념에 익숙하지 않지만 코코아 및 Objective-C로 작업하기 시작했습니다. NSMutableArray 클래스에서 몇 가지 궁금하고 예기치 않은 동작이 나타납니다.NSMutableAray RemoveObject : 예상대로 작동하지 않습니다.
먼저, 'CustomClass'클래스의 사용자 지정 개체를 사용하여 'NSMutableArray'개체를 만들고 채 웁니다. 그런 다음 개체 중 하나를 삭제하려고 시도하고 원하는 결과를 얻지 못합니다. 내가 원하는대로 간단하게, 네 번째 항목을 제거하는이 코드는,이 '전무'(즉, (ID)을 0x00000000)에 네 번째 항목을 설정하고, 더 혼동, 은을 삭제하는 대신
// NSMutableArray *Array is already initialized and loaded with 5 CustomClass Objects
// stored in variables 'CustomClassObject1' through 'CustomClassObject5'.
[Array removeObject:CustomClassObject4];
배열의 마지막 항목
제 생각에 이것은 일어나지 않아야합니다 - 네 번째 항목은 제거되어야하고 5 번째로 대체되어야합니다. 대신, 저는 이제 3 개의 객체와 하나의 무로 배열을 가지고 있습니다!
또한 만 같은 결과를 얻을
int position = [Array indexOfObject:CustomClassObject4];
[Array removeObjectatIndex:position];
을 시도했습니다. 왜 이런 일이 일어나는 지 아는 사람이 있습니까? 내가 뭔가를 오해하고 있니?
감사합니다.
코드 : 그런 다음
_Array = (NSMutableArray *) 0x0885c2c0 @ "5 Objects"
[0] = (CustomClass *) 0x0885c5f0
[1] = (CustomClass *) 0x0885c630
[2] = (CustomClass *) 0x0885c690
[3] = (CustomClass *) 0x0885c6f0
[4] = (CustomClass *) 0x0885c730
:
이 시점에서[Array removeObject:CustomClassObject4];
출력 :
_Array = (NSMutableArray *) 0x0885c2c0 @ "4 Objects"
[0] = (CustomClass *) 0x0885c5f0
[1] = (CustomClass *) 0x0885c630
[2] = (CustomClass *) 0x0885c690
[3] = (id) 0x00000000
이 시점에서
NSMutableArray *Array = [NSMutableArray array];
CustomClass *CustomClassObject1 = [[CustomClass alloc] init];
CustomClass *CustomClassObject2 = [[CustomClass alloc] init];
CustomClass *CustomClassObject3 = [[CustomClass alloc] init];
CustomClass *CustomClassObject4 = [[CustomClass alloc] init];
CustomClass *CustomClassObject5 = [[CustomClass alloc] init];
[Array AddObject:CustomClassObject1];
[Array AddObject:CustomClassObject2];
[Array AddObject:CustomClassObject3];
[Array AddObject:CustomClassObject4];
[Array AddObject:CustomClassObject5];
출력
대신 내가 3 개체를 삭제하면
[Array removeObject:CustomClassObject3];
출력은 다음과 같습니다
NSMutableArray *array = [NSMutableArray new];
[array addObject: [[CustomClass alloc] init] ];
// repeat for as many times you want.
// Fast enumerate the loop and get an output - You class will need to provide method id
for (CustomClass * c in array) NSLog(@"Class id: %@", [c id]);
// Then try to delete any random object.
[array removeObjectAtIndex: [array indexOfObject: object] ];
// And repeat the enumeration
for (CustomClass * c in array) NSLog(@"Class id: %@", [c id]);
이 시도하고 말씀해 주시겠습니까 :
_Array = (NSMutableArray *) 0x0885c2c0 @ "4 Objects"
[0] = (CustomClass *) 0x0885c5f0
[1] = (CustomClass *) 0x0885c630
[2] = (id) 0x00000000
[3] = (CustomClass *) 0x0885c6f0
배열에 객체를 설정 한 후 모든 값을 출력하고 마지막 행을 확인하십시오. 마지막 클래스가 초기화되지 않았을 수 있습니다. – Warewolf
초기화 된 방법과 배열 내부의 내용을 이해할 수 있도록 여기에 전체 코드를 게시하십시오. 객체를 삽입 한 후 배열을 인쇄하여 출력하십시오. – Warewolf
'NSMutableArray'가이 동작을하고 있습니까? 이러한 예기치 않은 결과를 얻기 위해 사용하는 코드를 게시하십시오. – Greg