0

어딘지 어떻게 든 할당 해제 된 개체에 문제가 있습니다. NSZombie 등을 사용하여 문제가되는 객체를 찾는 것과 같은 다양한 디버깅 기술을 사용했습니다. 그것은 그룹화 된 tableview 내 섹션 헤더 제목을 표시하는 데 사용되는 간단한 NSMutable Array 개체입니다. 이는 표제 헤더 함수로 리턴되는 객체이다개체가 신비하게 할당 해제 됨

- (는 NSString *)를 tableView (jQuery과 *)를 tableView titleForHeaderInSection (NSInteger) 섹션 I가 온 objectAtIndex을 사용하여 값을 복귀

상기 언급 한 물체. 나는 그것이 범위를 벗어나지 않도록 보장합니다. 이 그룹화 된 tableView는 사용자 정의 splitView 컨트롤러의 왼쪽에 나타납니다. 왼쪽 모두가 팝업으로 나오는 세로 모드에서 모두 잘 작동합니다. 문제 없음. 그것이 테이블로 나타나는 풍경에서 나는이 객체를 신비하게 할당 해제합니다. 분할보기는 처음에는 아무런 문제가 없습니다. 그런 다음 모달보기가 표시됩니다. 이 모달 뷰를 맨 위에 기각 할 때 섹션 헤더 객체는 모달을 닫을 때 표시하려고하는 모달 아래에서 분할 된 뷰를 신비하게 파기합니다.

모든 포인터 또는 단서?

감사합니다.

+0

변수 선언, 속성, 사용 위치 및 기타 관련 코드를 표시하면 도움이됩니다. – raidfive

+1

코드를 보여주세요! – Eiko

답변

0

코드를 사용하지 않으면 문제를 찾기가 정말 어려울 것입니다.

실제 장치, 시뮬레이터 또는 둘 다에서 충돌이 발생합니까? 수동으로 객체를 보유/할당하고 해제합니까 아니면 자동 해제 풀에 있습니까?

일반적으로 viewDidUnload, viewWillDisappear, didReceiveMemoryWarning 방법을 확인하고 출시 된 모든 내용이 적절한 방법으로 다시 만들어 졌는지 확인하십시오. 해당 배열을 여러보기 컨트롤러에서 사용하는 경우 모든보기 컨트롤러에서 해당 지점을 유지하고 해제해야합니다.

한 가지 방법은 배열 될 것이라고 발표 누가 알아 :

있는 NSMutableArray

의 서브 클래스
@interface myNSMutableArray : NSMutableArray {} 
@end 

@implementation myNSMutableArray 
-(oneway void)release { 
    NSLog(@"Being released"); 
    NSLog(@"retainCount: %i", [self retainCount]); 
    [super release]; 
} 
@end 

변경 myNSMutableArray에 정체 불명의 배열의 형태를 만들기 2 이후에 브레이크 포인트를 추가 NSLog 라인과 디버거가 중단 점에 도착하면 GDB에 백 트레이스를 요청하십시오 (bt 명령).

+0

모든 입력에 감사드립니다. 코드별로 잘 게시 할 수있는 것은 없지만 인터페이스에서 선언되고 tableView의 viewDidLoad에서 초기화되는 NSMutable 배열입니다. 나는 사방을 조사하여 내가 그것을 풀지 않도록 보장했다. 심지어 수동으로 유지하려고했습니다. 사용하지 마십시오. 시뮬레이터에서 충돌합니다. 그리고이 tableView는이 객체를 사용하는 유일한 컨트롤러입니다. 나는 일반적인 alloc-init뿐만 아니라 alloc-initWithArray를 시도해 보았고 나는 그것을 풀지 않고 수동으로 유지하지 않도록했다. 희망이 도움이됩니다. – Bourne

+0

디버그 옵션을 포함하도록 내 대답이 업데이트되었습니다. 시도해보십시오. 충돌의 역 추적도 유용 할 수 있습니다. release가 결코 호출되지 않는다면,'dealloc' +'NSLog (@ "retain count % i", retainCount)에 대해서도 같은 일을 고려해보십시오; – Thomas

+0

고마워요! 귀하의 의견이 도움이되었습니다. 그것은 이유를 설명하지는 않지만. 그러나 나는 세부 사항을 언급 한 실수를했다. 인터페이스에서 배열이 선언되지 않았습니다. 구현에서 전역 적이었습니다. 인터페이스 변수로 변경하고 수동으로 유지했습니다.일했다. backtrace NSLog는 구현 메모리를 보유하고 있음에도 불구하고 메모리가 갑자기 할당 해제 된 글로벌 구현이라는 사실을 깨닫는데 도움이되었습니다. 유일한 차이점은 선언을 인터페이스로 옮기고 인터페이스를 작동시키기위한 클래스 변수로 만들었습니다. – Bourne

0

배열을로드 (또는 다시로드) 할 때 보관 했습니까?

+0

예 내가 명시 적으로 유지했는지 확인했습니다. – Bourne

관련 문제