2014-07-17 2 views
0

32 비트 디바이스에서 철저히 테스트 한 스프라이트 키트 애플리케이션이 있습니다. 필자는 최근에 64 비트 장치에서 실행할 때 시작시 응용 프로그램이 다운되는 것을 발견했습니다.스프라이트 키트 스프라이트 생성이 64 비트 시뮬레이터에서 작동하지 않습니다.

이 코드는 SKNode에서 상속하는 클래스의 내 init 메서드에 있습니다.

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

[self.sprite setScale:BUILDING_SCALE]; 

[self addChild:_sprite]; 

addChild 행의 응용 프로그램이 64 비트 시뮬레이터에서만 충돌합니다. 64 비트 시뮬레이터 다시

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

과 :

내가 32 비트 시뮬레이터에 self.sprite의 설명을 인쇄하려고

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

또 다른 이상한 일을한다는 것입니다 스프라이트를 처음 초기화하고 단계를 건너 뛴 줄에 중단 점을 넣으면 스프라이트가 유효합니다.

아이디어가 있으십니까?

콜 스택 :이 64 비트에서 발생하지만, 문제는 스프라이트 속성이 assign 대신 strong 것을 왜 enter image description here

+0

어떤 타입? 로그에있는 모든 것, 즉 오류 메시지? 호출 스택이란 무엇입니까? – LearnCocos2D

+0

EXC_BAD_ACCESS (코드 = 1, 주소 = 0x30). 호출 스택의 스크린 샷을 추가하겠습니다. 콘솔에 아무것도 없습니다. – NMunro

+0

예외 중단 점을 추가하고 위 코드가 충돌하는 실제 addChild 호출인지 확인하십시오. 그리고 _properties가 sprite 키에 대해 반환하는 것을 확인하십시오. – LearnCocos2D

답변

0

확실하지.

기능 :

@property (nonatomic, strong) SKSpriteNode *sprite; 

충돌 : 충돌의

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

물론. assign 속성 키워드는 __unsafe_unretained와 동일하며 스프라이트가 "가비지 수집"되고 스프라이트 속성이 매달린 포인터와 함께 남아있게합니다. 어쩌면 컴파일러가 32 및 64 비트 용으로 약간 다른 ARC 코드를 생성하기 때문에 32 비트에서도 오류가 발생했을 수 있습니다. – LearnCocos2D

관련 문제