【问题标题】:How to implement NSManagedObjectContext inside application model instead of view controller?如何在应用程序模型中实现 NSManagedObjectContext 而不是视图控制器?
【发布时间】:2016-02-01 12:23:04
【问题描述】:

我想知道我是否可以让我的应用程序结构以一种方式将User 对象存储在 Core Data 中,而无需从视图控制器的角度了解太多关于 NSManagedObjectContext 的信息。

我想像他们在 Parse 等一些框架中那样做。您可以使用 [object save] 或 [object pin] 等简单方法在本地保存其对象。

我知道对于一些更复杂的对象,我肯定希望在视图控制器中控制 NSManagedObjectContext。但是如果 ob 只是将 User 保存为 currentUser 并稍后检索,我真的想以某种方式将 NSManagedObjectContext 封装在对象本身内。

所以不是方法
[User createCurrentUserInContext:self.context]
[User currentUserInContext:self.context]

我只想打电话
[User createCurrentUser]
[User currentUser]

你能给我一些建议吗?我期待着从您那里听到尽可能多的解决方案。

感谢您的帮助

【问题讨论】:

    标签: ios objective-c core-data nsmanagedobjectcontext


    【解决方案1】:

    如果您需要一个大型的本地对象存储,您将不得不处理数据库、SQlite3,而 CoreData 是一个很好的包装器,它简化了 SQlite3 的操作。 Parse Local Datastore 是implemented with SQlite3,所以对象固定基本上是调用通过 SQlite db 中的 NSManagedObjectContext 保存数据。

    如果您需要对 CoreData 进行更高级别的抽象,您可以为 CoreData 使用包装器,请查看here 了解一些流行的库。任何敏感数据(如用户凭据)都应存储在 keychain 中。

    【讨论】:

      【解决方案2】:

      我认为您需要一个与 Apple 设计 Core Data 的方式不同的框架。该框架旨在成为一个对象图(而不是“数据库”)。上下文作为“便笺”进行更改,独立于任何存储细节。

      视图控制器可以访问它们显示的对象、读取它们的属性并根据用户交互进行更改是有意义的。上下文是管理多线程、撤消管理器和其他强大功能的便捷构造。

      您描述的范例更接近 ActiveRecord。这实际上是一个偏好问题,因为这两种方法都有优点和缺点。 (我不想扩展这些,因为这主要是基于意见,不适合 StackOverflow 格式。)

      如果您想要user.save() 之类的内容,请查看MagicalRecord。这是一个非常流行的框架,它试图将 ActiveRecord 习语带入 Core Data。我不是粉丝,虽然我用过几次都没有大问题。

      【讨论】:

        【解决方案3】:

        如果你只想保存当前用户对象,我认为最简单的方法是使用 NSUserDefaults。

        您可以轻松地保存和检索对象,只需要几行代码。

        看看这个教程,它可以帮助你实现它。
        http://swiftcoder.me/2014/08/17/persisting-data-with-nsuserdefaults/

        【讨论】:

        • 好的,对于当前用户,以您的方式保存它更容易。但是我需要我的方法来处理更多数量的其他对象。为了简单起见,我只是在当前用户场景中解释它。
        猜你喜欢
        • 2012-12-08
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多