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 上

Centos7.5-文件权限管理

UITableView 在 iOS 7.1 上无法正确重新加载

无法将 ios 9.1 设​​备连接到 xcode 7.1

iOS 7.1 模拟器不适用于 Xcode 7.1

XCode 5.1 Beta 4 无法识别 iOS 7.1 Beta 4 测试设备