gpt4 book ai didi

ios - 将 managedObjectContext 从应用委托(delegate)传递给 View Controller

转载 作者:行者123 更新时间:2023-12-01 18:59:54 25 4
gpt4 key购买 nike

使用苹果的核心数据配方示例应用程序,我了解了如何将我的 managedObjectContext 从应用程序委托(delegate)传递给其他 View Controller 。但是,我正在尝试将 managedObjectContext 传递给不属于选项卡栏 Controller 的 View Controller ,因此我可以将它用于选择列表类型 View Controller ,并且当我尝试运行此 View Controller 时, managedObjectContext 的值一直显示为 null,表示上下文未通过。我希望有人能告诉我正确的方法来做到这一点。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary     *)launchOptions
{

// pass down our managedObjectContext to our AssessmentListTableViewController
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *nav1Controller = tabBarController.viewControllers[0];

AssessmentListTableViewController *assessmentListVC = (AssessmentListTableViewController *)nav1Controller.topViewController;
assessmentListVC.managedObjectContext = self.managedObjectContext;

//pass down our managedObjectContext to our ClientListTableViewController
UINavigationController *nav2Controller = tabBarController.viewControllers[1];

ClientListTableViewController *clientListVC = (ClientListTableViewController *)nav2Controller.topViewController;
clientListVC.managedObjectContext = self.managedObjectContext;

//pass down managedObjectContext for use in the AddEpisodeInfo view controller
AddEpisodeInfo *addEpisodeInfoVC = [[AddEpisodeInfo alloc]init];
addEpisodeInfoVC.managedObjectContext = self.managedObjectContext;

//pass down manageObjectContext to a separate tableview controller which allows me to pick the assessment to use
PickAssessmentTableViewController *pickAssessmentTableVC = [[PickAssessmentTableViewController alloc]init];
pickAssessmentTableVC.managedObjectContext = self.managedObjectContext;

return YES;
}

managedobjectcontext 的前两遍工作正常,但最后一个不工作,我不知道为什么。

最佳答案

您不应该在 AppDelegate 中分配这些 viewController。这些不是您稍后在应用程序中遇到的 viewController。它们是完全独立的实例。

您想将上下文传递到您自然会创建 viewController 的任何位置。

例如,如果你推送一个新的 viewController,你会在你创建 viewController 的地方设置上下文:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
PickAssessmentTableViewController *pickAssessmentTableVC = [[PickAssessmentTableViewController alloc]init];
pickAssessmentTableVC.managedObjectContext = self.managedObjectContext;

// setup...

// and push
[self.navigationController pushViewController:pickAssessmentTableVC animated:YES];
}

或者如果你使用 segue,你在 prepareForSegue:sender: 中设置上下文通过访问segue的destinationViewController:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushAddEpisodeInfo"]) {
AddEpisodeInfo *addEpisodeInfoVC = (AddEpisodeInfo *)segue.destinationViewController;
addEpisodeInfoVC.managedObjectContext = self.managedObjectContext;
}
}

是的,这意味着您可能必须添加 managedObjectContext viewControllers 的属性,它们实际上不会使用 Core Data 本身。这样您就可以将上下文传递给下一个 viewController。这是意料之中的,不是问题。

关于ios - 将 managedObjectContext 从应用委托(delegate)传递给 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com