【问题标题】:Swift 2 - Core Data - Object Oriented ProgrammingSwift 2 - 核心数据 - 面向对象编程
【发布时间】:2016-02-03 20:31:48
【问题描述】:

我正在使用 Core Data,但我不确定实际保存/获取数据的位置。这是一个小例子:

我有一个 ViewController 类,我想从 NSManagedObject 人那里获取数据并将其显示在标签中。现在我应该继续在 ViewController 中创建一个函数来获取/保存数据吗?问题是,如果我有很多 ViewController 需要相同的数据,我将不得不将函数复制到每个 ViewController 中。

我是否应该在我的 person 类中调用一个从 NSManagedObject 继承的函数并返回我要查找的内容?

是否最好创建一个不继承自 NSManagedObject 的类来返回我正在寻找的内容?

那么正确的做法是什么?

【问题讨论】:

    标签: swift oop core-data


    【解决方案1】:

    正确的方法是应用MVC设计模式

    • M:对于您应该完成所有模型(数据)工作的模型
    • V:对于视图,通常在情节提要中完成..
    • C:控制器将成为两者之间的中间人,帮助为正确的模型显示正确的视图,并根据视图更改更改模型。

    在您的情况下,您应该将属于模型的所有获取作业与 ViewController 分开,并在通常称为“Manager”或“”的单独类中进行服务”。

    在那里,您将获取所有数据,对其进行处理,然后将其作为输入传递给 viewController,以便 viewController 将其显示在 UI 中。

    这样,您在管理器中所做的一切都将可重用,您的代码将更有条理,您将应用标准帮助任何其他开发人员轻松理解您的代码,这样可以降低维护成本。

    【讨论】:

    • 谢谢!这就是我一直在寻找的
    【解决方案2】:

    从来没有一种方法可以实现相同的目标,而且大多数都是有效的方法。

    我通常的方法是创建一个“数据服务”类,将您从您使用的持久性引擎中抽象出来。这将帮助您在不需要真实数据库(使用模拟数据服务)的情况下编写测试,并提高代码重用性。

    我通常会创建一个额外的抽象层,向我的“api 服务”和“数据服务”询问我需要的信息并将其返回给我的控制器。

    例如,如果我正在处理 Twitter 客户端,我可能有一个 TwitService,它通过询问 DataService 检查我是否在数据库中已有所需的信息,然后转到 @ 987654323@ 获取所需信息(如果不存在)。然后它将它持久化到数据库中,以便在返回给调用者之前它已经可用于下一个请求。

    这样,视图控制器将简单地调用我的TwitService 来获取最近的信息,无论它是否已经被持久化或者它将从 Internet 获取。

    【讨论】:

      【解决方案3】:

      NSFetchedResultsController 是一个有助于控制核心数据某个方面的类,即单个实体类型的已获取对象的集合。

      它提供 API 来设置所需的数据、获取数据并观察数据的变化。

      我建议您将它用作您可能想要提供的一些东西的示例,并编写一个类似的控制器类,以提供获取数据并在数据变化时观察它的能力。

      您可能会发现NSFetchedResultsController 上的薄单板就是您所需要的(对于iOS)。对于 OS X,您可以使用 NSArrayController,但 NSFetchedResultsController 通常是一个很好的模型。

      【讨论】:

        猜你喜欢
        • 2016-10-27
        • 2021-01-22
        • 2012-09-26
        • 2016-09-26
        • 1970-01-01
        • 2016-08-16
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多