Если я изменю атрибут text на SKLabelNode после добавления его в качестве дочернего элемента, текст в представлении обновится. Но если я добавлю его в NSMutableArray, извлечу его и затем изменю значение, текст не будет обновляться в представлении.

Я предполагаю, что либо -addObject:, либо -objectAtIndex: из NSMutableArray копируют объекты вместо того, чтобы ссылаться на них, но, как вы можете видеть из их документации: (-addObject:, -objectAtIndex:), ни один из них ничего не говорит о копируемых объектах.

Примечание: вам может потребоваться перезагрузить страницы документации -addObject: и -objectAtIndex:, прежде чем вы попадете в нужное место на странице.

Что происходит? Почему мои изменения не распространяются?

MyScene.h:

#import <SpriteKit/SpriteKit.h>

@interface MyScene : SKScene

@property(nonatomic, strong) NSMutableArray *labels;

@end

MyScene.m:

#import "MyScene.h"

@implementation MyScene

@synthesize labels;

-(id)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {

        self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];

        SKLabelNode *label = [SKLabelNode labelNodeWithFontNamed:@"Consolas"];

        label.text = @"Test String";
        label.fontSize = 65;
        label.position = CGPointMake(CGRectGetMidX(self.frame),
                                     CGRectGetMidY(self.frame));
        [labels addObject:label];
        [self addChild:label];

        // If I uncomment the following line, the text won't update.
        // label = [labels objectAtIndex:0];

        label.text = @"Test String: Reloaded";
    }
    return self;
}

@end
-1
Michael Dorst 3 Мар 2014 в 10:17
1
Вы где-то создаете массив? Похоже, указатель меток может быть равен нулю.
 – 
Tyler Bindon
3 Мар 2014 в 10:30
Ой, я думаю, ты прав.
 – 
Michael Dorst
3 Мар 2014 в 10:31
Ага, это была проблема. Вы должны опубликовать это как ответ, чтобы получить баллы.
 – 
Michael Dorst
3 Мар 2014 в 10:33
1
Клянусь, около 80% времени разработки я трачу на действительно глупые ошибки и бесконечно пытаюсь их понять.
 – 
Michael Dorst
3 Мар 2014 в 10:34
1
Если вы приобретете привычку использовать отладчик для установки точки останова и проверки переменных, чтобы убедиться, что они соответствуют вашим ожиданиям, вы можете избежать потери времени. Отладка быстро выявила бы эту проблему.
 – 
prototypical
3 Мар 2014 в 16:57

1 ответ

Лучший ответ

Похоже, вы не создали NSMutableArray. Отправка сообщений в nil автоматически завершится ошибкой, и ничего не произойдет, без каких-либо намеков на то, почему.

2
Tyler Bindon 3 Мар 2014 в 10:34