prepareForSegue:sender:
메서드를 덮어 써야합니다. 작동하지 않았다 당신의 코드가 showList:animated:
방법 당신이 ListsViewController
인스턴스를 만든이며, 그것을 subject
를 할당하지만,이보기 왜 빠른 수정
- (void)showList:(Subject *)subject animated:(BOOL)animated
{
[self performSegueWithIdentifier:@"showDetail" sender:subject];
}
...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showDetail"]) {
ListsViewController *controller = ([segue.destinationViewController isKindOfClass:[ListsViewController class]]) ? segue.destinationViewController : nil;
controller.subject = ([sender isKindOfClass:[Subject class]]) ? subject : nil;
}
}
이유가 될 것입니다 컨트롤러는 절대로 발표되지 않았다. 대신 performSegueWithIdentifier:sender
은 subject
에 대해 아무것도 모르는 ListsViewController
클래스의 다른 인스턴스를 만듭니다. 따라서 UIStoryboardSegue가 스토리 보드에서 대상보기 컨트롤러를 인스턴스화하고 원하는 방식으로 구성 할 때까지 기다릴 필요가 있습니다.이 방법은 prepareForSegue:sender:
메소드에서 수행 할 수 있습니다.
performSegueWithIdentifier:sender
메서드에서 보낸 사람으로 subject
을 사용하는 것이 가장 좋지 않을 수도 있습니다. 발신자가 아니기 때문입니다. :) 내가 할 것이다 당신의 뷰 컨트롤러 클래스의 속성 제목을 작성하고 prepareForSegue:sender:
@interface MyViewController()
@property (strong, nonatomic) Subject *subject;
@end
@implementation MyViewController
- (void)showList:(Subject *)subject animated:(BOOL)animated
{
self.subject = subject;
[self performSegueWithIdentifier:@"showDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showDetail"]) {
ListsViewController *controller = ([segue.destinationViewController isKindOfClass:[ListsViewController class]]) ? segue.destinationViewController : nil;
controller.subject = self.subject;
}
}
...
@end
그것은 SEGUE의 라이프 사이클과 같은 방법을 알고 가치를. 문서는 [여기] (https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomSegues/CreatingCustomSegues.html#//apple_ref/doc/uid/TP40007457-CH16-SW1)입니다. –