使用此代码时出现此错误:
- (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。
有人可以告诉我如何解决这个问题吗?
答案 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
来使这更加健壮。