2010-02-05 2 views
3

저는 수수께끼 같은 문제가 있습니다 - 그렇게하기는 쉽지만 어떻게 든 작동하지 않는 것처럼 보입니다. Player라는 개체가 있습니다. Manager 클래스에는 Player 인스턴스가 네 개 있습니다.변수의 재 할당이 작동하지 않습니다.

@interface Manager 
{ 
    Player *p1, *p2, *mCurrentPlayer, *mCurrentOpponent; 
} 
// @property... 

Manager 객체에는 initPlayers 및 swapPlayers 메소드가 있습니다.

-(void) initPlayers { // this works fine 
    self.p1 = [[Player alloc] init]; 
    self.p2 = [[Player alloc] init]; 
    self.mCurrentPlayer = self.p1; 
    self.mCurrentOpponent = self.p2; 
} 

-(void) swapPlayers { // this swapping of pointer doesn't work 
    self.mCurrentPlayer = self.p2; 
    self.mCurrentOpponent = self.p1; 

    // When I look at the pointer in debugger, self.mCurrentPlayer is still self.p1. :-(

    // I even tried first setting them to nil, 
    // or first releasing them (with an extra retain on assignment) to no avail 
} 

무엇이 누락 되었습니까? 미리 감사드립니다!

+4

또한 인터페이스에서 @property 코드를 게시 할 수 있습니까? –

+0

@property (비 원자력, 보유) Player * p1, * p1, * mCurrentPlayer, * mCurrentOpponent; – twinkle

답변

3

접근 자 설정 방법을 모르면 코드를있는 그대로 문제를 해결하는 것이 어려울 수 있습니다.

Manager.h

@interface Manager 
{ 
    Player *p1, *p2, *mCurrentPlayer, *mCurrentOpponent; 
} 
@property (nonatomic, retain) Player *p1; 
@property (nonatomic, retain) Player *p2; 
@property (nonatomic, assign) Player *mCurrentPlayer; 
@property (nonatomic, assign) Player *mCurrentOpponent; 
@end 

Manager.m

을 : 그것은 여기에 귀하의 접근 및 코드 설정해야하는 방법이다 말했다되고
-(void) initPlayers { 
    self.p1 = [[[Player alloc] init] autorelease]; 
    self.p2 = [[[Player alloc] init] autorelease]; 
    self.mCurrentPlayer = self.p1; 
    self.mCurrentOpponent = self.p2; 
} 

-(void) swapPlayers { 
    Player * temp = self.mCurrentPlayer; 
    self.mCurrentPlayer = self.mCurrentOpponent; 
    self.mCurrentOpponent = temp; 
} 
0

문제는 코드에서 아무런 관련이없는 것으로 판명되었고 문제의 증상을 잘못 읽었습니다! 그러나 토론을 위해서 왜 @property를 여러 행에 넣고 임시 변수를 사용하여 플레이어를 교환해야합니까? (예 : James 답변에 따라)?

+0

당신은 e.James 대답에 대한 의견으로이 의견을 게시해야합니다. 어쨌든 코드는 플레이어를 교체하지 않습니다. 항상 p2를 현재 플레이어로 만들고 p1을 현재 상대방으로 만듭니다. – bbum

+0

@twinkle :'@ property' 선언을 한 줄에 결합하는 것에 대해 확신하지 못합니다. 그렇게 해본 적은 없지만 효과가있을 수 있습니다. –

+0

결합 된 선언은 잘 작동하지만 분명히 같은 줄에 할당하고 보유 할 수는 없습니다. :) – bbum

관련 문제