iOS 7.1 - 7.1.2 用户无法打开我的游戏
Posted
技术标签:
【中文标题】iOS 7.1 - 7.1.2 用户无法打开我的游戏【英文标题】:iOS 7.1 - 7.1.2 owners can't open my game 【发布时间】:2014-12-15 11:10:19 【问题描述】:我有一个简单的免费 ios 街机游戏在从 App Store 安装后无法正常运行,适用于 iOS 7.1 - 7.1.2 的 iPhone 所有者。该游戏是使用 Sprite Kit 和 Objective-C 构建的(没有 Swift 什么的),但本质上非常简单,没有任何花哨的代码或复杂性。它也适用于安装了 iOS 8.x.x 的任何人。下载 iOS 7.1 Simulator for Xcode 6 后,我能够重现问题:运行 iOS 版本 7.1 - 7.1.2 的 iPhone 的 4S、5 或 5S 全部崩溃 - 所以出现启动图像,但是当它需要从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
崩溃后,Xcode 将我带到一些关于“dispatch_once”的 Apple 代码页并突出显示第 68 行:
dispatch_once(predicate, block); Thread 1: signal SIGABRT
基本上,在 MyScene 内部,有 -(id)initWithSize:(CGSize)size 方法。在其中,我创建了
static dispatch_once_t onceMS;
dispatch_once(&onceMS, ^
在 dispatch_once 中,我有 4 件事: 1. 创建了一个 audioController 的实例(一个负责播放循环背景音乐的类)。 2. SKSpriteNode spriteNodeWithImageNamed: 3. SKLabelNode labelNodeWithText: 4. SKLabelNode labelNodeWithText:
所有这 4 件事都应该在游戏开始时出现一次:它们是关于如何玩的视觉说明。背景音乐是不言自明的。 我尝试将所有这些都注释掉,但它仍然显示与以前相同的崩溃日志。我继续注释掉整个静态 dispatch_once 并且仍然是游戏崩溃。有人可以给出一些智慧吗?由于缺乏经验,我不知道该怎么做。
【问题讨论】:
根据documentation+[SKLabelNode labelNodeWithText:]
在iOS7上根本不可用
当他把整个方块都打出来的时候,为什么游戏仍然崩溃?
OW 人。我该怎么办?我用那条线来显示分数、高分和游戏中的其他一些东西。然后我可以用什么来显示游戏中的分数、高分和单词?
【参考方案1】:
根据documentation+[SKLabelNode labelNodeWithText:]
在iOS7上根本不可用
我几乎没有使用 SpriteKit 的经验,但您应该能够替换所有实例
SKLabelNode *node = [SKLabelNode labelNodeWithText:@"your text"];
与:
SKLabelNode *node = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-UltraLight"];
node.fontSize = 32;
node.text = @"your text";
您也可以在 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
允许您使用:
SKLabelNode *node1 = [SKLabelNode mba_labelNodeWithText:@"your text"];
您必须不将类别方法命名为labelNodeWithText:
,因为您不想覆盖类别中的方法。
【讨论】:
以上是关于iOS 7.1 - 7.1.2 用户无法打开我的游戏的主要内容,如果未能解决你的问题,请参考以下文章
Testflight 不允许使用 iOS 8.1 SDK 编译的 iOS 7.1 应用程序安装在 iOS 7.1.2 iPhone 上