代码之家  ›  专栏  ›  技术社区  ›  Klemen

如何在应用程序模型而不是视图控制器中实现NSManagedObjectContext?

  •  0
  • Klemen  · 技术社区  · 9 年前

    我想知道我是否可以用一种存储 User 对象,而不从视图控制器的角度了解NSManagedObjectContext。

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

    我知道,对于一些更复杂的对象,我肯定希望在视图控制器中控制NSManagedObjectContext。但万一他只是在存钱 使用者 作为currentUser并稍后检索,我真的想以某种方式将NSManagedObjectContext封装在对象本身中。

    所以代替方法
    [User createCurrentUserInContext:self.context]
    [User currentUserInContext:self.context]

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

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

    谢谢你的帮助

    3 回复  |  直到 9 年前
        1
  •  1
  •   Community CDub    8 年前

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

    如果您需要比CoreData更高级别的抽象,可以使用CoreData的包装器,请检查 here 一些流行的图书馆。任何敏感数据(如用户凭据)都应存储在 keychain .

        2
  •  1
  •   Mundi    9 年前

    我认为你需要一个与苹果设计核心数据的方式不同的框架。该框架是一个对象图(与“数据库”相对)。上下文用作“临时记事本”,可以独立于任何存储细节进行更改。

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

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

    如果你想要这样的东西 user.save() ,看看 MagicalRecord 。这是一个非常流行的框架,试图将ActiveRecord习惯用法引入核心数据。我不是一个粉丝,尽管我已经用过几次了,没有什么大问题。

        3
  •  0
  •   Ulysses    9 年前

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

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

    查看本教程,它可能会帮助您实现它。
    http://swiftcoder.me/2014/08/17/persisting-data-with-nsuserdefaults/