managedObjectContext coredata实体或TopViewController

时间:2017-11-10 13:11:47

标签: objective-c core-data nsmanagedobject

我想用TableView创建具有2个Tabbaritems的应用程序(任务,列表,设置(不重要) - 如下图所示

enter image description here

我想管理核心数据。我想将核心数据存储到Task和List。并希望将列表中的核心数据链接到任务但我收到错误..这是AppDelegate中的代码:

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

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navController = tabBarController.viewControllers[0];

ItemListTableViewController *itemList = (ItemListTableViewController *)navController.topViewController;
itemList.managedObjectContext = self.managedObjectContext;

TaskListTableViewController *taskList = (TaskListTableViewController *)navController.topViewController;
taskList.managedObjectContext = self.managedObjectContext;

return YES;
}

在我只创建一个Tabbar(列表)之前,一切都可以找到但我想放置另一个tabbar(Task)和manageObject,如上所述。当我运行应用程序时,它可以工作,但是当我点击列表标签栏时,它会出错:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'List''

感谢您的帮助..

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中指出的那样,你的itemList和taskList都引用了同一个视图控制器。

ItemListTableViewController *itemList = (ItemListTableViewController *)navController.topViewController;

TaskListTableViewController *taskList = (TaskListTableViewController *)navController.topViewController;

唯一的区别是,在一种情况下,你它作为一个不同的类。实际上,您需要访问第二个选项卡的视图控制器 - 这可以在tabbarcontroller的viewControllers属性中找到。此数组中的第一项(索引0)对应于第一个选项卡的视图控制器,因此您正确拥有

UINavigationController *navController = tabBarController.viewControllers[0];

同样,第二个选项卡的视图控制器位于索引1处,因此您应该

UINavigationController *taskNavController = tabBarController.viewControllers[1];

然后你可以设置

TaskListTableViewController *taskList = (TaskListTableViewController *)taskNavController.topViewController;

(再看看你的tabbar图片,我看到我的索引方向错误:taskList与第一个标签相关,索引为0,而itemList是第二个标签,索引为1。