2014-07-17 46 views
0

我有一个Sprite Kit应用程序,我已经在我的32位设备上进行了全面测试。我最近发现我的应用程序在64位设备上运行时崩溃。Sprite Kit Sprite创建不适用于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 

另一个奇怪的是,如果我在第一次初始化精灵并逐步结束的行上放置一个断点,则精灵是有效的。

任何想法?

调用堆栈: enter image description here

+0

什么崩溃的类型?日志中的任何内容,即错误消息?调用堆栈是什么? – LearnCocos2D

+0

EXC_BAD_ACCESS(code = 1,address = 0x30)。我将添加调用堆栈的屏幕截图。控制台没有任何东西。 – NMunro

+0

添加一个异常断点并验证上面的代码是崩溃的实际addChild调用。并检查_properties返回的精灵关键字。 – LearnCocos2D

回答

0

不知道为什么发生这种情况仅在64位,但问题是,精灵属性为assign,而不是strong

功能:

@property (nonatomic, strong) SKSpriteNode *sprite; 

崩溃:

@property (nonatomic, assign) SKSpriteNode *sprite; 
+1

当然。 assign属性关键字相当于__unsafe_unretained,允许精灵被“垃圾回收”,精灵属性留下一个悬挂指针。它可能已经崩溃在32位,但没有,因为编译器可能会为32位和64位生成稍微不同的ARC代码。 – LearnCocos2D