2010-08-05 2 views
0

저는 iPhone 개발부터 시작하고 있으며 일반 UIViewController의 하위 부분 인 UITableView 프로그래밍에 약간의 문제가 있습니다. didSelectRowAtIndexPath는 EXC_BAD_ACCESS를 생성합니다 willSelectRowAtIndexPath는 잘 동작합니다.

문제점 :..

행을 도청의 didSelectRowAtIndexPath (나는 올바른 방법 서명을 검사 한 나는이 방법을 몸을 이동하는 경우 잘 작동 willSelectRowAtIndexPath하는 반면 EXC_BAD_ACCESS를 생성이 잘못된 것 같습니다 나에게 모든 문서/패턴이 didSelectRowAtIndexPath를 사용하기 때문에 Ok, 정말 이상한 것은 메서드가 호출되는지 여부입니다. 다음 로그 출력이 로깅되지 않으면 메서드가 실행되지 않았으므로 모든 코드를 넣을 수 있습니다. 그래서 왜 예외가 발생합니까? 게다가 willSelectRowAtIndexPath로 옮길 때 프로그램이 잘 실행되기 때문에 너무 일찍 출시 된 객체와 관련이 있는지 확인하기가 어렵습니다. 어쩌면 객체가있을 수 있습니다. (재) 할당 i 의지와 무대 사이의 n?

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     CommentViewController *commentViewController = [[CommentViewController alloc] initWithNibName:@"CommentViewController" bundle:nil]; 
     Comment *selectedComment = [[Comment alloc] init]; 
     selectedComment = [self.message.comments objectAtIndex:indexPath.row]; 
     commentViewController.comment = selectedComment; 

     [self presentModalViewController:commentViewController animated:YES]; 

     [selectedComment release]; 
     [commentViewController release];  
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     NSLog(@"This method is never called ... as I don't see this log output ... "); 
} 

설정 : jQuery과는 IB의 요소로 만들어지고있는 UIViewController의 기준 변수로 연결되어

. UIViewController는 데이터 소스 및 UITableView의 대리자로 설정됩니다. 지금까지는 UIViewController 뷰가로드되고 UITableView가 셀과 올바르게로드되었습니다. 즉, 데이터 소스의 대리자 메서드가 제대로 작동했음을 의미합니다.

다음 단계 : 그래서

지금은 (정말 문제가 지금 나던, 모달 또는 무엇이든 하나) 행을 클릭하여 다른보기를로드 할 붐은 EXC_BAD_ACCESS와 시뮬레이터 충돌은보고 콘솔.

실제로 이것에 대한 몇 가지 포인터를 사용할 수 있습니다. 미리 도와 주셔서 감사합니다! 당신이있는 tableview를 정지하고 위임/데이터 소스에 메시지를 보낼 수를 유지 willSelectRowAtIndexPath:에서 모달 뷰를 보여주고 있기 때문에 매트

답변

3

didSelectRowAtIndexPath

는 위의 코드에서 호출되고 있지 않습니다.

는 여기에 귀하의 충돌의 원인입니다 :

Comment *selectedComment = [[Comment alloc] init]; // creates new object 
    selectedComment = [self.message.comments objectAtIndex:indexPath.row]; // assigns a different existing object. Newly created object never used and leaking 
    commentViewController.comment = selectedComment; // set to assigned existing 

    [self presentModalViewController:commentViewController animated:YES]; 

    [selectedComment release] // BINGO! you release the assigned object 

귀하의 충돌은 위의 빙고 라인에 의해 발생합니다. 초기화 된 Comment 개체와 배열에서 반환 된 다른 완전히 관련이없는 Comment 개체를 혼동하는 것입니다. 배열에서 반환 된 Comment 개체를 보존하지 않고 해제합니다. 그런 다음 객체가 종료되고 이후에 액세스하려고하면 충돌이 발생합니다.

+0

안녕하세요 TechZen, 도와 주셔서 감사합니다. 나는 2 가지로 고통 받고있는 것 같았습니다. 실제로 당신의 충고가 도움이되었습니다. 나는 코드를 원래대로 되돌려 놓았고, 의지 방법을 완전히 제거했습니다. 나는 또한 나의 breakpoints가 존중되고 있지 않은 이상한 효과를 보았다. 나는 여기에서 inviestigated (http://www.innerexception.com/2008/05/in-xcode-orange-breakpoint-means-gdb.html)했다. 마침내 방법은 실제로 깨졌고 계속 진행되고 있습니다. 나는 아직도 원래 100 % 사용하지 않았고 실제로 사용하지 않았을 때 ... 실제로 모달을 나타냅니다. 아무 도움도 주셔서 감사합니다 !!! – Matthew

관련 문제