2010-07-07 4 views
1

내 응용 프로그램의 벡터에 매우 이상한 문제가 있습니다.맞춤 바인딩 가능한 클래스 및 벡터와 관련된 이상한 문제

세부 사항 ...

다음과 같은 클래스가 있습니다.

Person, Player, PlayerController.

Player extends Person. Person은 바인딩을 가능하게하기 위해 ObjectProxy를 확장합니다. Player 클래스에는 [Bindable] 태그가 있습니다.

PlayerController 클래스에는 firstname과 lastname을 받기 위해 php 메서드를 호출하는 원격 개체가 들어 있으며 CallResponder가 호출 결과를 얻으면 Result Handler는 Player 인스턴스를 만듭니다. 그 순간에 Player 객체를 벡터로 푸시하려고합니다.

문제는 다음과 같습니다.

push 메서드를 호출 할 때마다 벡터의 마지막 부분에 만들어진 마지막 플레이어가 벡터에 채워집니다. 다른 인스턴스도 대체합니다! 따라서 벡터에는 항상 가장 최근의 플레이어 인스턴스가 포함되지만 모든 인스턴스에 포함됩니다. : S

나는 또한 Array로 결과를 얻으려고 시도했다.

내가 잘못하고있는 것에 대한 의견이 있으십니까? 나를 미치게하고있어. : S

답변

1

내 생각 엔 플레이어의 새 인스턴스에 해당 참조를 설정 한 후 벡터에 동일한 객체 참조를 푸시합니다. 즉, 벡터의 모든 항목이 항상 동일한 객체를 참조합니다. 최신 개체. 나는 당신의 코드를 보지 못했기 때문에 "추측하다"라고 말합니다. 벡터, 지역 변수로 무엇을 밀어 넣고 있습니까? 멤버 변수?

편집 : 아래에 귀하의 의견을 바탕으로, 지역 변수를 사용하여 벡터에 새로운 플레이어 객체를 추가하는 것이 아니라 당신의 멤버 변수 (player_)에서 시도 : 당신은 내가 의심하는 일을하고 있습니다

var newPlayer:Player = new Player(); 
newPlayer.firstName = results[firstName]; 
newPlayer.lastName = results[lastName]; 
players_.push(newPlayer); 
player_ = newPlayer; 

, 어떤 벡터에 동일한 객체에 대한 여러 참조를 추가하는 중입니다. 객체의 모든 참조가 동일한 객체를 참조하기 때문에 하나의 객체를 변경하면 벡터의 모든 항목이 변경됩니다. 위의 작업을 수행하면 벡터에 추가 할 때마다 완전히 새로운 플레이어 객체가 만들어집니다.

+0

플레이어 인스턴스는 PlayerController 클래스의 전용 변수입니다. 클래스 내부의 전용 벡터로 푸시하여 이상한 결과를 얻으려고 시도했습니다. 또한 컨트롤러에 포함 된 구성 요소의 벡터에서이를 밀어 넣으려고 시도했지만 동일한 문제가 발생했습니다. 결과 핸들러의 코드는 다음과 같습니다. player_.firstName = results [firstName]; player_.lastName = 결과 [성]; players_.push (player_); 내가해야 할 일을하고 있습니까? 또는 나는 무엇인가 놓치고 있냐? : S –

+0

위의 수정 사항을 참조하십시오. 이렇게하면 문제가 해결됩니다. –

+0

나는 충분히 감사하지 않는다! 지난 3 ~ 4 일 동안 답을 찾고 있었기 때문에 당신은 곤경에 처한 날부터 나를 구해 냈습니다. 나는 당신이 당신의 대답을 편집하고있을 때 함수에서 새로운 객체를 생성하려고 생각했습니다. : D –

관련 문제