Этот подход работал для меня, и я думаю, что это правильно. Пока это самый простой и быстрый способ передачи данных между найденными мной сценами.
1. Основные сведения о USERDATA:
1,1. Удерживайте яблочный «Командный ключ» и нажмите левую кнопку мыши (в Xcode) в строке «userData» (например, «self». userData; »). Вы получите следующую информацию:
// An optional dictionary that can be used to hold user data pretaining to the node. Defaults to nil.
@property (SK_NONATOMIC_IOSONLY, retain) NSMutableDictionary *userData;
1.2. Посетите apple docs:userData
1.3 userData - это NSMutableDictionary, который в основном представляет собой специальный массив. Помимо значения, он содержит ключ, привязанный к значению. С помощью этого ключа вы можете найти значения. Это может быть полезно, как хорошо: apple docs:NSMuttableDictionary
2. Решение:
2,1. firstScene
//somewhere in firstScene.m
//how the tranisiton from firstScene to secondScene is going to look and how long it is goint to take
SKTransition *reveal = [SKTransition moveInWithDirection:SKTransitionDirectionDown duration:0.5];
SKView * skView = (SKView *)self.view;
SKScene *secondScene = [WBMGameEndsScene sceneWithSize:skView.bounds.size];
//You need to initialize the NSMD since it is by default nil.
secondScene.userData = [NSMutableDictionary dictionary];
Здесь я ссылаюсь на USERDATA в secondScene путем добавления объекта, который мой счет. Для цели это всего лишь 6. Я добавлю свою переменную экземпляра счета. Вы можете добавить все, что захотите, поскольку оно принимает объекты типа «id». Ключ важен. Вы будете использовать его в secondScene.m для доступа к значению объекта с тех пор. Убедитесь, что вы не ошибаетесь.
[secondScene .userData setObject:@"6" forKey:@"score"];
//Testing
NSLog(@"Is it finally working -- %@",[secondScene .userData objectForKey:@"score"]);
//The secondScene will scale to fit the whole SKView
secondScene.scaleMode = SKSceneScaleModeAspectFill;
//present the secondScene
[self.scene.view presentScene: secondScene transition:reveal];
* WBMGameEndsScene - это моя вторая сцена. Я создал его в Xcode с «File - New File ...» как: SKScene. Он будет содержать userData, показанный ниже.
2.2. secondScene
//secondScene.m (ex. in my :"@implementation WBMGameEndsScene")
Эти следующие строки проверки кода, если значение было добавлено:
-(void)didMoveToView:(SKView *)view
{
NSLog(@"-- -(void)willMoveFromView:(SKView *)view --");
NSLog(@"Working score is : %@",[self.userData valueForKey:@"score"]);
NSLog(@"Working score is : %@",[self.userData objectForKey:@"score"]);
}
выход консоли:
2014-03-12 15:29:06.804 AppTest[4841:60b] -(id)initWithSize:(CGSize)size
2014-03-12 15:29:06.806 AppTest[4841:60b] scoreLabel
2014-03-12 15:29:06.812 AppTest[4841:60b] successMessage
2014-03-12 15:29:06.815 AppTest[4841:60b] Is it finally working -- 6
2014-03-12 15:29:06.815 AppTest[4841:60b] -- -(void)willMoveFromView:(SKView *)view --
2014-03-12 15:29:06.816 AppTest[4841:60b] Working score is : 6
2014-03-12 15:29:06.816 AppTest[4841:60b] Working score is : 6
Если я что-то неправильно, пожалуйста, поправьте меня :) , характеристики: IOS 7.0, Xcode версии 5.1 (5B130a), OS X 10.9.2
Я хотел бы использовать синглтон для этого – DogCoffee