2010-01-15 3 views
1

3.1.2 SDK를 기반으로 제작되었지만 내 앱이 2.2.1 기기에서 실행되도록하려고합니다.iPhone OS 3.1.2 및 2.2.1 모두에 대한 문제가 발생했습니다.

아래의 표는

Deployment |Base  |Device  |Result 
Target  |SDK   |Version  | 
-------------+------------+------------+------- 
3.1.2   3.1.2  3.1.2  Runs OK 
2.2.1   3.1.2  3.1.2  Runs OK 
2.2.1   2.2.1  2.2.1  Runs OK 
2.2.1   3.1.2  2.2.1  Builds OK, interrupt signal when run 

라인 # 3 내 코드 중 어느 것도 SDK 년대 사이에 호환성이 없다는 것을 증명 내 결과를 보여줍니다. 문제의 근본 원인을 찾기 위해 약점을 맺을 필요가있는 모든 것을 제거했습니다.

인터럽트는 프로그램 시작 후 즉시 나타나지만 즉시 실행되지는 않습니다. 그리고 그것이 일어나는 요점은 3.0 피처와 관련이없는 코드에 있습니다.

멈추고있는 선은 4 개의 float (ab)/(c/d)와 관련된 간단한 수학 연산이며, 그 중 어떤 것에도 문제가있는 것 같습니다. (It 's C++)

이런 상황에서 다른 원인으로 인터럽트 신호가 발생할 수 있습니까?

업데이트 :

그것에서 중단있어 정확한 지점이 플로트에 U64 캐스팅 것 같다.

답변

0

무슨 일이 일어 났는지는이 앱을이 구성으로 실행하면 갑자기 u64를 float 또는 double로 캐스팅하는 데 문제가 있다는 것입니다. u64 주조 코드가 변경된 것 같습니다. 따라서 sdk와 일치하지 않는 운영 체제 버전을 실행할 때만 실패합니다.

어쨌든 해결 방법은 u64를 부호없는 int로 변환 한 다음 float로 변환하는 것입니다. 물론, 나는 문제의 숫자가 항상 정규 int에 들어갈 수있는 상황에 있기 때문에 그렇게 할 수 있습니다.