0

このコードを使用すると、次のエラーが発生します。

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

if ([segue.identifier isEqualToString:@"Add Role Segue"])
  {
    NSLog(@"Setting RolesTVC as a delegate of AddRolesTVC");

   AddRoleTVC *addRoleTVC = segue.destinationViewController;
    addRoleTVC.managedObjectContext = self.managedObjectContext;
  }
}

このコードは、Table View Controller を使用することを決定するまでは完全に機能し、上部にナビゲーション バーを表示するには、ナビゲーション コントローラーを埋め込む必要がありました。

エラーは次のとおりです。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[UINavigationController setManagedObjectContext:]: 認識されないセレクターがインスタンスに送信されました

私が理解している方法は、UINavigationController が managedObjectContext を取得するように作成されていないため、Navigation Controller が邪魔になり、managedObjectContext を転送しないためです。

これを修正するにはどうすればよいですか?

4

1 に答える 1

4

セグエのメソッドは、期待どおりではなく、をdestinationViewController:返します。が管理しているビューコントローラを確認する必要があります。最初のものはあなたのものでなければなりません。UINavigationControllerAddRoleTVCUINavigationControllerAddRoleTVC

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

if ([segue.identifier isEqualToString:@"Add Role Segue"])
  {

    UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
    AddRoleTVC *addRoleTVC = (AddRoleTVC *)[navController.viewControllers objectAtIndex:0];
    NSLog(@"Setting RolesTVC as a delegate of AddRolesTVC");

    addRoleTVC.managedObjectContext = self.managedObjectContext;
  }
}

これをもう少し堅牢にするために、(1)navControllerが実際にviewControllers配列にviewControllerを持っていることを確認し、(2)型をチェックしてそれが。であることを確認しAddRoleTVCます。

于 2012-11-01T02:06:49.427 に答える