0

我发现很难掌握如何在 iPhoneCoreDataRecipes 应用程序中加载视图并与 TabBarController 连接。

有人对如何学习此 Apple 示例应用程序中提出的概念有任何指示吗?我已经阅读了 Apple 开发者网站上的其他项目。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
   recipeListController.managedObjectContext = self.managedObjectContext;
   [window addSubview:tabBarController.view];
   [window makeKeyAndVisible];
}

我对上面
第2行的理解:填充列表控制器?
第 3 行:将子视图添加到选项卡控制器视图?

如果我对第 3 行的理解是正确的,那么其他视图 Unit Conversion 添加到 tabcontroller 的位置在哪里?

4

4 回答 4

2

标签栏控制器需要一个视图控制器列表。我没有看到这个具体的样本,所以它可能会被第一行照顾。但是,通常您会执行以下操作:

  1. 实例化所有视图控制器:

    UIViewcontroller *viewControllerTab1 = ...
    UIViewcontroller *viewControllerTab2 = ...
    UIViewcontroller *viewControllerTab3 = ...
    
  2. 将它们添加到标签栏控制器:

    tabBarController.viewControllers = 
      [NSArray arrayWithObjects:
         viewControllerTab1,
         viewControllerTab2,
         viewControllerTab3, 
         nil
      ];
    
  3. 然后,您将 tabBarController 的视图作为子视图添加到窗口,然后是窗口 makeKeyAndVisible(第 2 行和第 3 行)。这些不是特定于标签栏的,它们只是将标签栏视图添加到主应用程序视图中,就像您添加任何其他视图控制器一样。

您也可以在此处或在视图控制器上指定 UITabBarItem 详细信息。您应该在此处执行此操作,这样您就不会遇到标签栏项目未显示的任何问题。IE

viewControllerTab1.tabBarItem = [UITabBarItem init...]
于 2009-06-24T17:56:17.593 回答
1

实际上:

第 2 行:将对 managedObjectContext 的引用传递给 recipeListController。managedObjectContext 是一个 CoreData 结构。它包括对持久存储(通常但不总是磁盘上的文件 [SQLite])和 managedObjectModel(项目中的文件)的引用。此上下文允许您对已持久保存到数据库的对象模型进行查询。(因为这个例子是食谱:“获取所有需要成分“面粉”的食谱)。但是由于这不是(严格来说)直接的数据库查询,所以返回的“东西”是对象,而不是记录集中的行。您只会在 CoreData 应用程序中找到对 managedObjectContexts 的引用。

第3行:上面已经解释过了。这是向应用程序的窗口添加一个子视图,然后将 tabBarController.view 分配给该子视图。假设 tabBarController 之前已经填充了适当的 viewController。

希望有帮助。

于 2009-06-24T18:13:53.823 回答
0

该代码闻起来像窗口和选项卡控制器都被加载到 NIB 中。至此,一切都已经“连线”了,它所做的只是设置窗口的子视图并使其成为关键。

这可能会有所帮助。在 XCode 中创建一个新的基于选项卡的应用程序,看看它做了什么。它将同时具有 NIB 加载和代码定义的视图,因此您可以看到差异。

于 2009-06-24T18:05:00.513 回答
0

我认为您正在寻找的问题与我在 Interface Builder 中加载视图时遇到的问题相同,而不是代码。

所以步骤是:

1:打开mainwindow.xib

2:设置视图模式为列视图

视图模式选择是什么样的

3:打开标签栏控制器并向下导航到标签元素

在此处输入图像描述

4:设置身份的类

班级应该是什么样子

我一直在尝试连接主选项卡本身,但您需要更具体!

希望这可以帮助!

于 2011-07-18T20:52:16.400 回答