【问题标题】:Sprite Kit sprite creation not working on 64 bit simulatorSprite Kit sprite 创建不适用于 64 位模拟器
【发布时间】:2014-09-08 19:17:28
【问题描述】:

我有一个 sprite kit 应用程序,我已经在我的 32 位设备上进行了全面测试。我最近发现我的应用在 64 位设备上运行时会在启动时崩溃。

此代码在我的 init 方法中,用于继承自 SKNode 的类。

self.sprite = [SKSpriteNode spriteNodeWithImageNamed:[_properties objectForKey:@"Sprite"]];

[self.sprite setScale:BUILDING_SCALE];

[self addChild:_sprite];

该应用仅在 64 位模拟器上的 addChild 行崩溃。

我尝试在32位模拟器上打印出self.sprite的描述:

<SKSpriteNode> name:'(null)' texture:[<SKTexture> 'image1.png' (266 x 76)] position:{0, 0} size:{53.200001, 15.2} rotation:0.00

再次在 64 位 模拟器上:

<SKSpriteNode> name:'(null)' texture:['nil'] position:{0, 0} size:{53.200000762939453, 15.199999809265137} rotation:0.00

另外一件奇怪的事情是,如果我在精灵第一次初始化的那一行放了一个断点,然后越过,精灵是有效的。

有什么想法吗?

调用栈:

【问题讨论】:

  • 什么类型的崩溃?日志中的任何内容,即错误消息?调用堆栈是什么?
  • EXC_BAD_ACCESS(代码=1,地址=0x30)。我将添加调用堆栈的屏幕截图。控制台中没有任何内容。
  • 添加异常断点并验证上述代码是实际崩溃的 addChild 调用。并检查 _properties 为 sprite 键返回的内容。
  • 我有一个异常断点。它在 addChild 处停止。 _properties 返回正确的图像文件名。
  • 您是否尝试过清理项目以及从设备/模拟器中删除应用程序?

标签: ios objective-c ios7 sprite-kit skspritenode


【解决方案1】:

不知道为什么这只发生在 64 位上,但问题是 sprite 属性是 assign 而不是 strong

功能:

@property (nonatomic, strong) SKSpriteNode *sprite;

崩溃:

@property (nonatomic, assign) SKSpriteNode *sprite;

【讨论】:

  • 当然。分配属性关键字等效于 __unsafe_unretained 允许精灵被“垃圾收集”并且精灵属性留下一个悬空指针。它也可能在 32 位中崩溃,但没有因为编译器为 32 位和 64 位生成的 ARC 代码可能略有不同。
猜你喜欢
  • 1970-01-01
  • 2016-11-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多