Если я изменю атрибут 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 ответ
Похоже, вы не создали NSMutableArray. Отправка сообщений в nil автоматически завершится ошибкой, и ничего не произойдет, без каких-либо намеков на то, почему.
Похожие вопросы
Новые вопросы
objective-c
Этот тег следует использовать только для вопросов, касающихся функций Objective-C или зависящих от кода на языке. Теги [cocoa] и [cocoa-touch] следует использовать, чтобы узнать о фреймворках или классах Apple. Используйте связанные теги [ios], [macos], [apple-watch] и [tvos] для проблем, характерных для этих платформ.