간단한 테스트 응용 프로그램에서 "thisArray"라는 배열 객체를 MasterViewController
에서 DetailViewController
의 "passedData"라는 문자열로 전달하려고했습니다. 나는 스토리 보드를 사용 중이며 UIViewController
은 내비게이션 컨트롤러 안에 내장되어있다. prepareForSegue
방법을 사용하여, 나는 성공적으로 UIViewController
사이에 데이터를 전달 :보기 컨트롤러간에 데이터 전달 DidSelectRowsAtIndexPath Storyboards
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushData"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
DetailViewController *destViewController = segue.destinationViewController;
destViewController.passedData = [thisArray objectAtIndex:indexPath.row];
}
}
을 지금 내가 대신 prepareForSegue
의 didSelectRowsAtIndexPath
를 사용하려면 몇 가지 이유. 나는 이것을 사용했다 :
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
}
그러나 그것은 작동하지 않았다. 나는 다음을 사용했다 :
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
[self.navigationController pushViewController:detailViewController animated:YES];
}
그러나 그것은 또한 작동하지 않았다.
질문 :
1) 어떻게 제대로 prepareForSegue
을 대체 할 didSelectRowsAtIndexPath
를 작성?
2) 내가 didSelectRowsAtIndexPath
사용하는 경우, 나는 스토리 보드에서 UIViewController
사이의 SEGUE의 연결을 제거해야합니까?
3) 실제로보기 컨트롤러간에 연결이 끊어지지 않으면 어떻게 didSelectRowAtIndexPath
을 사용하여 데이터를 전달할 수 있습니까?
감사합니다.
업데이트 : 대답과 내가 접수 된 의견을 바탕으로, 내가 다음 썼다 : 스토리 보드 ID DetailViewController
을 설정
먼저 내가 컨트롤러 사이의 SEGUE 연결을 제거 한 클래스의 이름도 DetailViewController
.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"DetailViewController"
bundle:nil];
UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"DetailViewController"];
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
[self.navigationController pushViewController:detailViewController animated:YES];
}
하지만이 다음 오류와 함께 추락하기 :
*** Terminating app due to uncaught exception
NSInvalidArgumentException
, reason: 'Could not find a storyboard namedDetailViewController
in bundle
참조 dasblinkenlight의 편집 및 자신에 업데이트 된 코드를 변경 : 여기에 귀하의 방법이 어떻게 보일지입니다. 당신이하려고하는 것을 돌봐야합니다!:) – lnafziger
예 완료되었습니다. 감사! – AJ112