2012-12-06 7 views
6

iOS 개발에 비교적 익숙합니다. 발생한 오류의 근본 원인을 찾아 주셔서 감사합니다.주소 : 0x75d52a0의 할당 해제 된 객체 (좀비)에 Objective-C 메시지가 전송되었습니다.

인스트루먼트 (즉, 할당 - 좀비 프로파일 러)를 사용하여 오류를 디버깅하려고했지만 제시된 호출 스택을 이해할 수 없었습니다.

이 사용자 인터페이스를 연결하는 방법입니다 : TabBarController ->있는 navigationController -> TopPlacesTableViewController -> RecentPhotosTableViewController -> PhotoViewController

의 그 즉 내가 (마지막보기에서 뒤로 버튼을 클릭하면 오류가 발생합니다 PhotoViewController). 이 동작은 이전의 RecentPhotosTableViewController를 보여 주기로되어 있지만 대신 알려지지 않은 할당 해제 된 객체에 액세스했습니다. viewWillAppear 및 ViewDidAppear의 이벤트 사이에 언젠가 액세스했습니다.

또한 TopPlacesTableViewController 및 RecentPhotosTableViewController의 부모 인 GenericTableViewController가 있습니다. 하위 뷰에로드되는 데이터 인 부모에서 NSMutableArray 속성을 설정합니다.

현재 iOS6 및 XCode4.5를 사용하고 있습니다.

[업데이트 : 콘솔에서이 줄이 표시되었습니다. "[UIView _forgetDependentConstraint :] : 할당 해제 된 인스턴스 xxx로 보낸 메시지"].

+0

ARC로 컴파일 하시겠습니까? 아니요? –

+0

예. 방금 ARC가 켜져 있음을 확인한 Anoop Vaidya에게 대답했습니다. – user1881383

답변

0

ARC를 사용하지 않고 이전 객체를 계속 전달하지 못한다고 생각합니다. 그 전까지는 이전 객체가 릴리스 된 다음 액세스합니다.

ARC를 사용하거나 retain 또는 autorelease를 사용하도록 코드를 리팩토링 할 수 있습니다.

+0

신속한 답변을 보내 주셔서 감사합니다! 방금 "타겟 -> 빌드 설정 -> Apple LLVM 컴파일러 - 언어 -> Objective-C 자동 참조 계산"에서 설정을 확인하고 ARC가 켜져 있음을 확인했습니다. 어쨌든 내가 할당 해제 된 후에 어떤 객체가 해제되고 액세스되었는지 정확히 지적 할 수 있습니까? – user1881383

+0

그것은 찾기가 매우 어렵습니다. 중단 점을 수행하고 각 줄마다 단계별로 수행해야합니다. 또는 당신이 할 수있는 한가지는 ARC를 사용하고 있다고 확신하기 때문에 스스로 할 수 없다는 것입니다. 그래서 당신이 할 수있는 일은 모든 물건을 강하게 만들고 확인하는 것입니다. –

+0

이상한 일이 일어났습니다. PhotoViewController를 삭제하고 새로운 것을 스토리 보드로 드래그 한 후에도 오류가 다시 발생하지 않았습니다. – user1881383

-1

는 Go 제품에> 편집 방식> 진단은 다음에 체크 해제되는 오브젝트 알고 단계적으로 좀비가

가 중단 점을 개체를 활성화하고 이동 탭, 그것은 아마도 개체에 대한 포인터는 제거 된 OS가 개체를 할당 취소했습니다.

+2

좀비 객체를 활성화했지만 호출 스택이 유용하지 않습니다. Objective C 코드의 유일한 이해할 수있는 행은 AppDelegate의 기본 메소드 (즉, @autoreleasepool {return UIApplicationMain (argc, argv, nil, NSStringFromClass ([PhotosAppDelegate class])}}에서 트리거됩니다. – user1881383