2

테스트 할 3G 장비를 사용하여 애플리케이션을 개발했습니다. 친구에게 테스트를 해보니 충돌이 일어난 것으로 나타났습니다. 충돌 로그를 살펴 봤지만 몇 번의 메모리 경고 후 "EXC_BAD_ACCESS"문을 제외하고는별로 사용하지 않습니다.iPhone 앱 디버깅 도움말 - EXC_BAD_ACCESS

내 장치에서 imagePicker 제비를 사용할 수 있으며 사진을 찍을 때마다 메모리 경고가 표시되지만 문제가 발생하지는 않습니다.

내 친구의 기기 (3G도 가능)에서 카메라에서 선택한 몇 장의 이미지가 지나면 앱이 다운됩니다.

그래서 내 질문은 .. 은 메모리 경고 때문에 무언가가 할당 해제되고 있다고 생각하지만 내 친구의 기기에서만 처리가 취소 된 다음 다시 할당을 시도한 다음 다시 사용하려고합니다. 어떤 객체가 호출되는지 어떻게 알 수 있습니까? NSZombies는 원격 (베타) 장치이므로 사용할 수 없습니다.

도와주세요.

누군가가 내 장치가 문제없이 이미지 후 이미지를 선택할 수 있습니다 왜 어떤 아이디어를 가지고 자신이 ... 그

덕분에 가장 도움이 될 수 없습니다 또한 경우에!

EDIT : 새로운 발견 .. 나는이 오류 메시지도 받는다 : 나는 데이터 액세스와 관련된 것으로 이해하는 KERN_PROTECTION_FAILURE이다. 충돌은 UIImagePicker에서 가져온 이미지를 저장 한 직후에 발생하는 것으로 보입니다. 어떤 아이디어?

+1

아마도 이미지 선택 도구가 위임됩니다. 당신이 그것을 풀어 줄 가능성이 있습니까? 친구는 여전히 충돌 로그를 보낼 수 있습니다. iTunes를 사용하여 기호를 얻는 방법 및 기호를 나타내는 방법에 대해 Google에서 검색하십시오. –

+0

나는 그것을 풀어 놓은 것 같지 않습니다. didFinishPickingMediaWithInfo 대리자 메서드에서 피커를 닫을뿐입니다. 피커를 취소하기 전에 반환 된 '정보'를 사용해야합니다. 현재 픽커를 먼저 닫은 다음 반환 된 이미지를 사용합니다. –

답변

3

너는 뭔가를 과도하게 발표 할 수도있다. Snow Leopard를 실행중인 경우 Static Analyzer (Cmd-Shift-A)를 실행하고 메모리 오류를 찾으십시오.

메모리 오류 후 충돌이 발생하여 UIViewController가 해당보기를 해제했음을 알 수 있습니다. NSNotifications를 준수하는 UIViewController를 가지고 있습니까? 그렇지 않으면 오프 스크린 상태에서 IBOutlets를 변경할 수 있습니까? 이것은 이런 종류의 충돌의 일반적인 원인입니다. correctly memory managing your IBOutlets인지 확인하십시오. UIViewController는 화면이 꺼져있을 때 IBOutlet (또는 UI 구성 요소)을 혼동해서는 안됩니다. 이 실수를하지 않더라도 위의 링크에서 설명한대로 구현하지 않으면 메모리 경고 이후에도 충돌이 발생할 수 있습니다.

MemoryWarning은 꽤 좋은 생각이었고, 상황은 개선되었지만, 애플은 여전히 ​​UIViewController와 관련된 모든 문제를 해결하지 못했습니다. 개발자는 여전히 조심해야합니다.

+0

안녕하세요. 정적 분석기를 시도했지만 오류가 발생하지 않았습니다. 사실, 창 하단의 '성공한'메시지를 제외하고는 아무 일도 일어나지 않았습니다. 매우 이상합니다. –

+0

그다지 이상하지 않습니다. 단지 명백한 오류가 없음을 의미합니다. 잘못 처리 된 IBOutlet은 clang에 의해 포착되지 않으며 해제 된 객체에 대한 알림도받지 않습니다. –

+0

내 로그 파일에서 다음을 볼 수 있습니다. 이것은 [PictureView clearPage]에서 문제가 발생했음을 의미합니까? 예외 유형 : EXC_BAD_ACCESS (SIGBUS) 예외 코드 : 0 0 추락 스레드 : 0x0000000f 추락 스레드에 KERN_PROTECTION_FAILURE \t 0 libobjc.A.dylib 0x00003ebc objc_msgSend + 20 1의 MyApp \t 0x0000378a - PictureView [PictureView clearpage를 (.m : 79) –

0

친구가 컴퓨터에 와서 NSZombieEnabled로 실행시켜야합니다. 이 문제를 디버깅하는 가장 좋은 방법입니다.

+0

그래, 그게 내가하고 싶은 일이지만 꽤 불가능합니다. 이런 식으로 기록 할 방법이 없습니까? –