【问题标题】:Three20 + Core Data Simple ExampleThree20 + 核心数据简单示例
【发布时间】:2011-02-23 15:07:33
【问题描述】:

我梳理了 SO、Google 小组和 blog-o-sphere 试图找到一个如何让 Three20 库与 Core Data 一起工作的示例,但没有找到太多可说的。

这里有没有人知道我在哪里可以找到关于如何使用 Core Data 实体和 Three20 的简单教程(或愿意发布一个)?可能是这样的:

我有一个名为Book 的核心数据实体,它具有字符串属性titledescription。我将如何创建一个简单的应用程序,该应用程序将打开一个显示所有书籍列表的表格视图,并且当触摸一行时,将视图推送到显示所选书籍对象属性的导航控制器上? (只是一个想法——任何展示如何使用 Core Data / Three20 的东西都将不胜感激)

谢谢!

【问题讨论】:

    标签: iphone cocoa-touch three20


    【解决方案1】:

    Core Data 和 Three20 不会有任何具体的实现。它们是您可以用来自己实现特定实现的工具。您使用 Three20 来显示您在 Core Data 中拥有的数据。

    我建议你放弃 Three20 并首先学习编程标准表格视图控制器的基础知识。您可以通过在 Xcode 中创建一个新的 iPhone 应用程序并选择“使用 Core Data 进行存储”来了解 Core Data 驱动的表格视图控制器的基础知识。

    模板代码至少会为您指明正确的方向,并且应该可以帮助您更好地了解 MVC,这将帮助您实现 Three20。同时,您还应该考虑使用mogenerator+xmo'd。这是创建自定义托管对象的唯一方法。

    如有疑问,请consult the master 并在此处就 SO 提出特定的核心数据问题。

    【讨论】:

      【解决方案2】:

      据我所知(Three20 文档很少),Three20 无法自动使用 Core Data。

      我通常做的是:

      • 从 Core Data 获取实体集
      • 将相关数据(来自实体)加载到 TTTableViewController 中的 TTTableViewDataSource(例如 TTSectionedDataSource)
      • 瞧!

      通过实现 TTTableViewDataSource 子类并让它收集/管理实体,可能有一种更动态的方法来做到这一点,但我认为这不值得。

      (在将实体加载到 Three20 中的数据源之前,您需要将它们转换为表项,因为数据源并不完全是 Three20 中的数据源)。

      例如

      [TTSectionedDataSource dataSourceWithObjects:
              @"",   // section header
              [TTTableTextItem itemWithText:@"An item" URL:@"http://www.facebook.com"],
              [TTTableSummaryItem itemWithText:@"Another item"],
              nil];
      

      更新:我不认为您可以通过 Three20 URL 方案将实体直接传递到详细视图(尽管存在通用对象机制)。您可以通过查询参数将对象作为 NSDictionary 的一部分传递。

      例如你可以有一个映射,如

      [map from:@"example://bookDetails/(initWithName:)" toViewController:[BookDetailsController class]];
      

      还有这样的方法定义

      - (id) initWithName:(NSString *)theName query:(NSDictionary *)query
      

      您可以使用它来推送详细视图控制器

      // navigationURLString = @"example://bookDatails/Alice in WonderLand" (in URL encoding)   
      [self.navigationController pushViewController:[[TTNavigator navigator] 
                      viewControllerForURL:navigationURLString query:dictionaryWithEntity] animated:YES];
      

      或者,您可以将相关数据作为参数传递给 init 调用,或者只是实体的主键,然后在详细视图控制器中再次获取对象。

      【讨论】:

      • 到目前为止,我和你在一起,并且已经阅读到设置NSFetchedResultsController 并使用它来填充和更新TTSectionedDataSource 非常容易。但我完全陷入困境的是如何将核心数据对象映射到 URL。因此,一旦您处于表格视图显示记录的位置(我的示例中的书籍),您如何设置TTTableItem 以便在触摸时链接到“详细视图”并将核心数据对象传递为争论?
      • 我在原始帖子中添加了一些细节来回答您的问题。根据 NSFetchedResultsController,我没有将 Three20 与它结合使用。需要对其进行一些研究:) 还有一个我没有扩展的通用对象传递机制,因为我觉得使用起来很尴尬。
      【解决方案3】:

      现在有三个分支 - CoreDataSupport - 支持使用 NSFetchedResultsController。在那里你会找到一个 NSFetchedResultsDataSource。

      【讨论】:

        猜你喜欢
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        相关资源
        最近更新 更多