2012-11-01 64 views
0

使用此代码时,我收到此错误:错误Transfering ManagedObjectContext核心数据

- (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; 
    } 
} 

此代码的工作完美,直到我决定,我想使用一个表视图控制器,并为了让我有一个导航栏在顶部我不得不嵌入导航控制器。

的错误是:

终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因是:“ - [UINavigationController的setManagedObjectContext:]:无法识别的选择发送到实例

,我理解的方式这是因为导航控制器阻碍了它,并且它不会传输managedObjectContext,因为UINavigationController没有取得managedObjectContext。

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

回答

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

+0

我有类似的在我的应用程序委托只是不知道如何reword使它为UINavigationController。非常感谢 – Zack