iOS 7.1 - 7.1.2所有者无法打开我的游戏

Kre*_*kin 3 crash objective-c sprite-kit ios7.1 xcode6

我有一个简单的免费iOS街机游戏,从App Store安装后无法正常运行,适用于iOS 7.1 - 7.1.2的iPhone用户.游戏是使用Sprite Kit和Objective-C构建的(没有任何Swift,但是它本质上非常简单,并且没有任何花哨的代码或复杂性.它也适用于安装了iOS 8.xx的任何人.下载iOS 7.1 Simulator for Xcode 6之后,我能够重现这个问题:iPhone的4S,5或5S运行iOS 7.1 - 7.1.2全部崩溃 - 所以启动图像出现,但是当它需要加载游戏时SKScene类称为MyScene,它只是不打开.在崩溃日志中,它说明如下:

+[SKLabelNode labelNodeWithText:]: unrecognized selector sent to class 0x1022503a0

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[SKLabelNode labelNodeWithText:]: unrecognized selector sent to class 0x1022503a0'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001029a6495 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010270199e objc_exception_throw + 43
    2   CoreFoundation                      0x0000000102a3755d +[NSObject(NSObject) doesNotRecognizeSelector:] + 205
Run Code Online (Sandbox Code Playgroud)

崩溃后,Xcode带我到一些关于"dispatch_once"和高亮显示第68行的Apple代码页:

dispatch_once(predicate, block);          Thread 1: signal SIGABRT
Run Code Online (Sandbox Code Playgroud)

基本上,在MyScene里面,有 - (id)initWithSize:(CGSize)大小方法.在里面,我创造了

static dispatch_once_t onceMS;
dispatch_once(&onceMS, ^{
Run Code Online (Sandbox Code Playgroud)

在dispatch_once中,我有4件事:1.创建了一个audioController实例(一个负责播放循环背景音乐的类).2. SKSpriteNode spriteNodeWithImageNamed:3.SKLabelNode labelNodeWithText:4.SKLabelNode labelNodeWithText:

所有这四件事都是在游戏启动开始时出现的一次:它们是如何玩的视觉指示.背景音乐是​​自我解释的.我尝试评论所有这些,但它仍然显示与以前相同的崩溃日志.我继续评论整个静态dispatch_once仍然是游戏崩溃.有人可以发一些智慧吗?由于缺乏经验,我不知道该怎么做.

Mat*_*uch 6

根据iOS7上的文档 +[SKLabelNode labelNodeWithText:]根本没有

我几乎没有SpriteKit的经验,但你应该能够替换所有的实例

SKLabelNode *node = [SKLabelNode labelNodeWithText:@"your text"];
Run Code Online (Sandbox Code Playgroud)

有:

SKLabelNode *node = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-UltraLight"];
node.fontSize = 32;
node.text = @"your text";
Run Code Online (Sandbox Code Playgroud)

您也可以在SKLabelNode上创建自己的类别:

@interface SKLabelNode (iOS7Compatibility)
+ (instancetype)mba_labelNodeWithText:(NSString *)text;
@end

@implementation SKLabelNode (iOS7Compatibility)
+ (instancetype)mba_labelNodeWithText:(NSString *)text {
    SKLabelNode *node = [self labelNodeWithFontNamed:@"HelveticaNeue-UltraLight"];
    node.fontSize = 32;
    node.text = text;
    return node;
}
@end
Run Code Online (Sandbox Code Playgroud)

允许您使用:

SKLabelNode *node1 = [SKLabelNode mba_labelNodeWithText:@"your text"];
Run Code Online (Sandbox Code Playgroud)

不能命名类别方法labelNodeWithText:,因为您不想覆盖类别中的方法.