Objective-C: назначение одного CGPoint другому не работает

Я пытаюсь сделать что-то очень простое.

CGPoint newPlayerCoordinate = self.thePlayer.playerCoordinate;
newPlayerCoordinate.x = newPlayerCoordinate.x + 1;
self.thePlayer.playerCoordinate = newPlayerCoordinate;

Код компилируется, однако операторы NSLog говорят мне, что "self.thePlayer.playerCoordinate" никогда не обновляется должным образом, хотя я устанавливаю его равным модифицированному CGPoint.

Я знаю, что "newPlayerCoordinate" обновляется правильно, в том числе благодаря использованию операторов `NSLog.


person shadowmoses    schedule 25.05.2014    source источник


Ответы (2)


Обновлено на основе пересмотренного кода и комментариев. Сохраняйте ответ, чтобы поддерживать комментарии.

Скорее всего проблема в том, что self.thePlayer это nil. Вам нужно присвоить значение свойству thePlayer.

person rmaddy    schedule 25.05.2014
comment
Спасибо. Я ошибся, когда набирал свой первоначальный вопрос. Вторая строка кода должна была сказать: "newPlayerCoordinate.x = newPlayerCoordinate.x + 1" NOT "newPlayerCoordinate = newPlayerCoordinate.x + 1", как это было изначально. Я знаю, что это меняет ваш ответ сейчас ... - person shadowmoses; 25.05.2014
comment
Да, это ОГРОМНАЯ разница. Прочтите последнюю строчку моего ответа. Вы уже убедились в этом? - person rmaddy; 25.05.2014
comment
Спасибо. Я сделал тест, и кажется, что мой self.thePlayer на самом деле равен нулю! Хотя я не понимаю, почему. В моем связанном заголовочном файле я включил объект как свойство: @property (strong, nonatomic) PAplayerClass *thePlayer; Я, вероятно, упустил здесь что-то фундаментальное, так как я очень новичок в этом. - person shadowmoses; 25.05.2014
comment
Вам нужно присвоить значение свойству thePlayer. - person rmaddy; 25.05.2014
comment
О Боже. Я никогда не выделял память для объекта. Я подумал, что, поскольку я определил его как свойство в необходимом заголовочном файле, я готов к работе. Впереди долгий путь... Вы указали мне правильное направление для проверки, равно ли self.thePlayer нулю. Спасибо. - person shadowmoses; 25.05.2014

Здесь вы назначаете CGFloat для CGPoint:

newPlayerCoordinate = newPlayerCoordinate.x + 1;

Используйте это вместо этого:

newPlayerCoordinate = CGPointMake(newPlayerCoordinate.x + 1, newPlayerCoordinate.y);
person notadam    schedule 25.05.2014
comment
Спасибо. Я ошибся, когда набирал свой первоначальный вопрос. Вторая строка кода должна была сказать: "newPlayerCoordinate.x = newPlayerCoordinate.x + 1" NOT "newPlayerCoordinate = newPlayerCoordinate.x + 1", как это было изначально. Я знаю, что это меняет ваш ответ сейчас ... - person shadowmoses; 25.05.2014