Переназначение переменной не работает - PullRequest
3 голосов
/ 05 февраля 2010

У меня загадочная проблема - кажется, это должно быть так легко сделать, но почему-то это не работает. У меня есть объект под названием 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
}

Чего мне не хватает? Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

Не зная, как настроены ваши методы доступа, будет сложно устранить неисправность кода как есть. При этом, вот как ваши аксессоры и код должны быть настроены:

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 голосов
/ 05 февраля 2010

Оказывается, проблема была где-то не связана в коде, и я неправильно понял симптомы проблемы! Но просто для обсуждения, почему необходимо иметь @property на нескольких строках и использовать переменную temp для обмена игроками (согласно ответу e.James)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...