2013-01-07 5 views
2

문제점 : 특정 uitableviewcell을 선택할 때 새 DetailViewController을 열어야합니다. didSelectRowAtIndexPath에 코드를 작성했지만 셀을 클릭하면 런타임 오류가 표시됩니다.선택시 UITableViewCell 선택 New DetailViewController로 이동

[self.navigationController presentModalViewController:jacket animated:YES ];으로 전화를 걸었지만보기 컨트롤러가 열리지 않습니다.

내가 시도한 또 다른 방법은 [self.navigationController performSegueWithIdentifier:@"JacketDetails" sender:self ];입니다.

세그린에 지정된 식별자가 있습니다.이 속성은 검사기에서 "JacketDetails"가 있지만 여기에서는 yime 오류가 발생합니다. Segue를 UITABLEVIEWCELL에서 VIEWCONTROLLER으로 연결했습니다.

행을 클릭하면 JacketDetailViewController 열려 있어야합니다. 클래스 JacketDetailViewController을 만들고 New ViewController에 대해이 클래스를 inspector에서 설정했습니다.

왜 나는 segue가 보이지 않는지 모르겠다. 관리자의 식별자를 부여하고 tableviewcell에서 새 View Controller로 올바르게 연결했다.

JacketDetailViewController 자켓 목록을 표시하고 싶습니다. 현재 비어 있습니다. ViewController.

내 코드는 다음과 같습니다. 솔루션을 제안 해 주시겠습니까? 나는이 분야에서 스스로 가르치는 초보자이다. 나는 사소한 실수를 범했을지도 모른다. 나는 나의 문제를 봤고 그것을 해결하려고 노력했지만 나는 며칠 동안 여기서 붙어있다. 콘솔에서

TshirtDetailViewController.m 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Navigation logic may go here. Create and push another view controller. 

    [tableView deselectRowAtIndexPath:indexPath animated:YES ]; 

    JacketDetailController *jacket =[[JacketDetailController alloc]init]; 

    NSInteger index =indexPath.row; 

    NSLog(@"Row:%d",index); 


    NSString *titleString = [[NSString alloc] initWithFormat:[jackets objectAtIndex:indexPath.row]]; 


    NSLog(@"%@",titleString); 
    jacket.title=titleString; 


    // ... 
    // Pass the selected object to the new view controller. 

    [self.navigationController performSegueWithIdentifier:@"JacketDetails" sender:self ]; 


    // [self.navigationController presentModalViewController:jacket animated:YES ]; 

} 


@end 

오류 :이 선보기를 엽니 다

2013-01-07 10:52:21.020 KidsShopee[617:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<UINavigationController: 0x6a5fac0>) has no segue with identifier 'JacketDetails'' 

*** First throw call stack: 

(0x13bf052 0x1550d0a 0xdd24b 0x3e8e 0xa671d 0xa6952 0x92e86d 0x1393966 0x1393407 0x12f67c0 0x12f5db4 0x12f5ccb 0x12a8879 0x12a893e 0x16a9b 0x1b08 0x1a65 0x1) 
terminate called throwing an exception(gdb) 
+0

에 오신 것을 환영과

[self.navigationController performSegueWithIdentifier:@"JacketDetails" sender:self ]; 

를 교체합니다. 나는 당신에게 상당한 노력을 보여주는 확실한 질문이 무엇인지에 경의를 표합니다. 코드 블록, 인라인 코드 및 비 코드 블록의 형식을 지정하는 방법을 더 잘 이해하기 위해 내가 작성한 편집 내용을 검토하십시오. 거의 모든 것이 코드 블록 안에있었습니다. 현재의 편집 된 양식에서 나는 당신의 질문을 upvote 수 있습니다 (그리고 않았다). 그것이 전에 downvote를 정말로 가치가 있었던 방법. 영어는 걱정하지 마세요. 대문자, 구두점 및 서식에 대한 일반 규칙을 따르십시오. 이것은 독자가 이해하고 downvotes를 탈출하는 데 도움이됩니다! – ErikE

+0

칭찬에 감사드립니다. 그리고 당신은 내가 거의 25 번 같은 질문을 편집 해 보았고 그것을 정확하게 내 수준으로 설명하려고 노력했음을 알았습니다. – krish

답변

3

시도 : YoutubeViewController 대신에

YoutubeViewController *objYoutubeViewController = [[YoutubeViewController alloc]initWithNibName:@"YoutubeViewController" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:objYoutubeViewController animated:YES]; 
    [objYoutubeViewController release]; 

이 라인을 변경 & 뷰 컨트롤러 클래스 이름을 지정

당신에 따르면 & 체크. 좋아요. 스토리 보드를 사용하면 다음 아래와 같은 시도 :

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
bookmarkViewController *myVC = (bookmarkViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"bookmarkViewController"] 
[self presentModalViewController:myVC animated:YES]; 

을 bookmarkViewController의 장소에서 컨트롤러 이름을 & 확인을 제공합니다. 드래그 & 드롭보기에 주요 스토리 보드에서

컨트롤러는 이미지를 아래와 같이 바로 클래스의 이름을 내 bookmarkViewController 이름 대신 enter image description here

열려는 뷰 컨트롤러 이름을 지정합니다.

+0

얘들 아, 각 셀을 클릭하면 각보기 컨트롤러를 열어야합니다. 여기 샘플 채취 자켓, 내가 그것을 클릭하면 새로운 JacketDetail보기 컨트롤러가 표시됩니다. 그래서 각각의보기 컨트롤러를 열어야하는 기타 옵션을 클릭하면 .. – krish

+0

StoryBoard를 사용하고 있습니다. nitWithNibName을 모른다 : @ "JacketDetailController"번들 : nil] ;] 여기서 작동합니다. – krish

+0

귀하의 질문에 분명하지 않다 ... 나는 당신이 다른보기 컨트롤러를 열어 셀 클릭에 원하는 것 같아요? – Vishal

0

당신이 오류를 바탕으로 탐색 기반이 그런

[self.navigationController pushViewController:jacket animated:YES]; 

를 응용 프로그램 - 그것의 ViewController 기반이 애플리케이션 -

[self presentModalViewController:jacket animated:YES]; 
+0

StoryBoard를 사용하고 있습니다. 작동하지 않습니다 ... 런타임 오류 – krish

0

인 경우 this-

JacketDetailController *jacket =[[JacketDetailController alloc]initWithNibName:@"JacketDetailController" bundle:nil];];///Change string as your nib name. 

로 사용해 볼 수 점점 ""JacketDetails '라는 식별자가있는 segue가 없으므로 segue에 대한 호출이 올바르지 않습니다. 나는 스토리 보드에있는 seque에서 내 .m 파일로 복사 한 이름에서 붙여 넣기하지 않으면 제대로 작동하는 씨크 이름에 문제가 있음을 발견했습니다. 철자 및 대소 문자가 정확하더라도 여러 번 찾아내어 복사 및 붙여 넣기가 문제를 해결했습니다.

+0

을 보았습니다. 동일한 식별자를 붙여 넣기 만하면됩니다. – krish

0

스토리 보드의 Segue를 테이블 뷰 셀에서 다른 컨트롤러로 연결 한 경우, segue fire를 만들기 위해이 코드를 전혀 필요로하지 않습니다. 필요한 정보를 상세 제어기로 전달하려면 prepareForSegue를 구현해야하지만 다른 코드는 필요하지 않습니다.

+0

didSelectRowAtIndexPath 메소드에서 prepareForsegue 메소드를 작성해야합니까? ?? pls – krish

+0

@ krish 아니, didSelectRowAtIndexPath를 전혀 구현하면 안된다. 마스터 - 세부 템플릿에서 새 프로젝트를 만들고 prepareForSegue에서 수행 한 작업을 살펴보십시오. – rdelmar

1

내비게이션 컨트롤러에서 performSegueWithIdentifier:sender:으로 전화하지 마십시오! 커스텀 viewController 만이 segues를 가질 수 있습니다. 자기 한테 전화 해.

에 유래에

[self performSegueWithIdentifier:@"JacketDetails" sender:[tableView cellForRowAtIndexPath:indexPath]]; 
+0

나에게 잘 해줬습니다. – zatatatata

관련 문제