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:]:无法识别的选择器发送到实例

我理解它的方式是因为导航控制器挡住了路,它不会传输 managedObjectContext,因为 UINavigationController 没有采用 managedObjectContext。

我该如何解决?

4

1 回答 1

4

segue 的destinationViewController:方法返回 a UINavigationController,而不是AddRoleTVC您期望的 the 。您应该查看UINavigationController正在管理的视图控制器。第一个应该是你的AddRoleTVC.

- (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 回答