2012-03-26 4 views
1

저는 아직 스토리 보드 작업에 익숙하지 않습니다. 이 문제를 디버깅하는 데 2 ​​일을 보냈습니다. -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender이 호출 될 때 segue의 대상보기 컨트롤러가 제대로 작동하지 않는 것 같습니다.segue가 수행 될 때 다음보기 컨트롤러가로드되지 않습니다.

나는 테이블 뷰를 가지고 셀을 탭하면, 그것은 item가 제대로 prepareForSegue까지 전달하지만 detailViewController.item 야생 포인터하는 SEGUE

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    VAItem *item = [category itemAtIndex:indexPath.row]; 
    [self performSegueWithIdentifier:@"SegueShowDetail" sender:item]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"SegueShowDetail"]) { 

     VADetailViewController *detailViewController = segue.destinationViewController; 
     detailViewController.item = (VAItem*) sender; // <-- THIS ASSIGNMENT DOES NOT WORK  
    } 
} 

내 디버깅 프로그램

을 요구한다. 초기화되지 않았으므로 = 할당이 적용되지 않습니다.

VADetailViewController의 viewDidLoad에 중단 점을 넣었고 할당이 수행 된 후에도 item 변수가 여전히 야생 포인터 주소라는 것을 알았습니다.

@interface VADetailViewController : UIViewController 
// data 
@property (nonatomic, retain) VAItem *item; 
@end 

항목도 올바르게 합성됩니다.

이 어떤 도움이 많이 레오

+0

는 디버거가 적용되지 않은 할당을 보여줍니다 엑스 코드에서 버그가 수 있도록이 보이지만 실제로는 내 세포 중 하나를 탭하면 전화 번호로 전화를 걸어 때문에 나는 didSelectRowAtIndexPath를 사용하고자 – leo

답변

3

storyboard segue를 사용하여 다음 viewcontroller로 전환하는 경우이 상황에서 tableVeiew:didSelectRowAtIndexPath:을 사용할 필요가 없습니다. 문제 해결에 도움이되는 것들을 어떻게 설정 했느냐에 달려 있습니다.

스토리 보드에서 Tableview의 프로토 타입 셀에서 세부보기 컨트롤러 (즉, 셀에서 NOT의 tableViewController)로 푸시 세그먼트를 그렸는지 확인하십시오. 스토리 보드를 설정하면 사용자가 셀을 선택하자마자 세그먼트가 트리거됩니다. 셀 자체에 대한 참조는 매개 변수로 prepareForSegue:sender:으로 전달됩니다. 그런 다음 해당 객체를 검사하여 해당 메소드에서 클릭 된 행을 찾을 수 있습니다.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"SegueShowDetail"]) { 

     // sender will be the tableview cell that was selected 
     UITableViewCell *cell = (UITableViewCell*)sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

     VAItem *item = [category itemAtIndex:indexPath.row]; 

     VADetailViewController *detailViewController = segue.destinationViewController; 
     detailViewController.item = item;  
    } 
} 
+0

했다. 내 응용 프로그램에 대상보기 컨트롤러가없는 경우 스토리 보드에서 어떻게 단편을 만들 수 있는지 모르겠습니다. – leo

0

을 감사합니다 당신은 정말에만 다음 뷰 컨트롤러에 따라 데이터를 전달하는 하나의

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

의 사용하려고합니다. 당신이 경우에 후자를 사용하려는 경우, 당신은의 라인을 따라 뭔가 코드를 변경해야합니다

if ([segue.identifier isEqualToString:@"SegueShowDetail"]) { 

    VADetailViewController *detailViewController = segue.destinationViewController; 
    detailViewController.item = [catagory itemAtIndex:[self.tableView indexPathForSelectedRow].row]; 
} 

나는 당신 때문에 당신이 보낸 사람을 할당 무슨 오류가지고 있었다 생각합니다. 다음은 '보낸 사람'이 무엇인지 설명하는 문서에 대한 참조입니다.

https://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/performSegueWithIdentifier:sender

:이 도움이

희망.

관련 문제