2010-03-05 4 views
1

내 프로그램에는 Collector와 Entity의 두 클래스가 있습니다. 콜렉터는 NSMutableArray에 엔티티를 저장합니다.Objective-C : NSMutableArray 내에서 객체 변경

@interface Entity : NSObject { 
    ... 
} 

@interface Collector : NSObject { 
    NSMutableArray *entities; 
    uint someInt; 
    ... 
} 
- (void)addEntity:(Entity*)newEntity; // implemented as [entities addObject:newEntity]; 

콜렉터도 NSMutableArray에 저장됩니다 (콜렉터라고 부름). 그럼 난 (이 같은) 이러한 코드가 있습니다

for (uint i = 0; i < [collectors count]; i++) { 
    Collector *curCollector = [[collectors objectAtIndex:i] retain]; 

    Entity *curEntity = [[Entity alloc] init]; 
    [curCollector addEntity:curEntity]; 
    [curCollector setSomeInt:50]; 

    [curEntity release]; 
    [curCollector release]; 
} 

이 코드 부분의 실행 후, 나는 제대로 새로운 집 내부 엔티티하지만 someInt 값이 변경이 없습니다. 또한, 변수를 공개하기 전에 단계에서 내 코드를 디버깅 할 때, curCollector는 새로운 엔티티를 포함하고 있으며 주소는 콜렉터 배열 내부의 객체 중 하나와 같지만 해당 객체 (콜렉터 배열에 있음)에는 엔티티가 없습니다.

내가 뭘 잘못하고 있니?

P.S .:
디버깅하는 동안 모든 개체를 검사했는데 아무 것도 발견하지 못했습니다 (특히 엔티티의 경우).
addObject 정보 - 모든 구현 코드는 [entities addObject:newEntity];
입니다. 또 다른 흥미로운 점은 위의 설명에서와 같이 int 값이 올바르게 설정되어 있습니다 (수집기 배열의 객체에 someInt == 50이 포함되어 있음).

P.P.S : 나는 코드 부분을 해제하기 전에 라인을 추가하지했습니다

[collectors replaceObjectAtIndex:i withObject:curCollector]; 

검색 결과를!

+0

curCollector가 엔티티를 가질 수 없으며 콜렉터 엔트리가 엔티티를 가지고 있지 않은지 확인합니다 (내가 말한 것). – nall

+0

실마리가 없습니다. 어쩌면 addEntity : 메서드를 자세히 살펴 보겠습니다. – yehnan

+0

또한 엔티티 멤버가 0이 아닌지 확인하십시오. 그것은 귀하의 의견을 기반으로하지 않는 것 같지만 그게 문제가 될 수도 있습니다 (그것은 더 많은 코드 없이는 말하기 어렵습니다). – nall

답변

0

흠. 시간을 낭비해서 죄송합니다.이 코드에는 오류가 없습니다.
이 코드는 물론 프로그램의 일부입니다. 그리고 그 오류는 나중에 몇 단계에서 발견되었습니다.
디버그 프로세스 중 문제는 클래스의 내용을 자세히 볼 수없는 XCode 디버거에 의해 유발되었습니다. 엔티티가 엔티티 배열에 있다는 뜻입니다. 그 어레이는 컬렉터 내부에 있었고이 컬렉터는 컬렉터 어레이 자체 안에있었습니다. 그리고 엔티티 배열을 일부 로컬 변수에 가져 오려고 시도했을 때 반환 된 배열에는 엔티티 (XCode 디버거에 표시됨)가있었습니다.

관련 문제