Sprite kit 为什么Xcode 6样板文件在GameViewController.m中定义SKScene+方法?

Sprite kit 为什么Xcode 6样板文件在GameViewController.m中定义SKScene+方法?,sprite-kit,Sprite Kit,Spritekit锅炉板在GameViewController.m中具有以下功能 #import "GameViewController.h" #import "GameScene.h" @implementation SKScene (Unarchive) + (instancetype)unarchiveFromFile:(NSString *)file { /* Retrieve scene file path from the application bundle */

Spritekit锅炉板在GameViewController.m中具有以下功能

#import "GameViewController.h"
#import "GameScene.h"

@implementation SKScene (Unarchive)

+ (instancetype)unarchiveFromFile:(NSString *)file {
    /* Retrieve scene file path from the application bundle */
    NSString *nodePath = [[NSBundle mainBundle] pathForResource:file ofType:@"sks"];
    /* Unarchive the file to an SKScene object */
    NSData *data = [NSData dataWithContentsOfFile:nodePath
                                      options:NSDataReadingMappedIfSafe
                                        error:nil];
    NSKeyedUnarchiver *arch = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    [arch setClass:self forClassName:@"SKScene"];
    SKScene *scene = [arch decodeObjectForKey:NSKeyedArchiveRootObjectKey];
    [arch finishDecoding];

    return scene;
}

@end
我理解这个方法,但我不理解的是为什么要在GameViewController.m文件中定义它。GameViewController继承自UIViewController。为什么不将类扩展放在GameSecene.m中呢

该类别扩展了SKScene及其所有子类,包括GameSene。它位于视图控制器中是有意义的,因为这是加载和显示初始场景的地方。如果在GameSecene.m中声明,则需要在GameSecene.h中添加一个适当的@interface,以便在没有编译器错误的情况下使用它。将类别添加到允许用户从菜单中选择级别的SKScene子类中是有意义的,因为该子类需要加载和呈现各种场景

编辑:要从SKScene子类中取消归档.sks文件,请将以下内容添加到视图控制器的.h文件中,并在场景子类中导入.h

@interface SKScene (Unarchive)

+ (instancetype)unarchiveFromFile:(NSString *)file;

@end

如何重用视图控制器或SKScene子类中的unarchiveFromFile?这似乎是苹果在其WWDC 2014会话608视频中所表现的行为。