2014-07-17 44 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