使用Core Data传输ManagedObjectContext时出错

时间:2012-11-01 01:41:03

标签: ios xcode core-data

使用此代码时出现此错误:

- (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。

有人可以告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

segue的destinationViewController:方法正在返回UINavigationController,而不是AddRoleTVC。您应该查看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来使这更加健壮。