2012-11-01 61 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