如何在应用程序模型而不是视图控制器中实现 NSManagedObjectContext?
How to implement NSManagedObjectContext inside application model instead of view controller?
我想知道我是否可以通过在 Core Data 中存储 User
对象的方式制作我的应用程序结构,而无需从视图控制器的角度了解 NSManagedObjectContext。
我想像他们在某些框架(例如 Parse)中那样做。您可以使用 [object save] 或 [object pin] 等简单方法在本地保存其对象。
我知道对于一些更复杂的对象,我肯定希望在视图控制器中控制 NSManagedObjectContext。但是如果 ob 只是将 User
保存为 currentUser 并在以后检索,我真的想以某种方式将 NSManagedObjectContext 封装在对象本身中。
所以不用方法
[User createCurrentUserInContext:self.context]
或
[User currentUserInContext:self.context]
我只想打电话
[User createCurrentUser]
或
[User currentUser]
你能给我一些建议吗?我期待从您那里听到尽可能多的解决方案。
感谢您的帮助
如果只想保存当前用户对象,我认为最简单的方法是使用 NSUserDefaults。
您可以轻松地保存和检索对象,只需要几行代码。
看看这个教程,它可能会帮助你实现它。
http://swiftcoder.me/2014/08/17/persisting-data-with-nsuserdefaults/
我认为您想要一个框架,其理念与 Apple 设计 Core Data 的方式所反映的理念不同。该框架旨在成为一个对象图(而不是 "database")。上下文用作 "scratch pad" 进行更改,独立于任何存储详细信息。
视图控制器可以访问它们显示的对象、读取它们的属性并更改以响应用户交互,这是有道理的。上下文是管理多线程、撤消管理器和其他强大功能的便捷构造。
您描述的范例更符合 ActiveRecord 的思路。这实际上是一个偏好问题,因为这两种方法都有优点和缺点。 (我不想展开这些,因为这主要是基于意见,不适合 Whosebug 格式。)
如果您想要 user.save()
之类的东西,请查看 MagicalRecord。这是一个非常流行的框架,它试图将 ActiveRecord 惯用法带入 Core Data。我不是粉丝,虽然我用过几次都没有大问题。
如果您需要大型本地对象存储,则必须处理数据库 SQlite3,而 CoreData 是一个很好的包装器,它简化了 SQlite3 的操作。 Parse Local Datastore 是 implemented with SQlite3,所以对象固定基本上是调用通过 NSManagedObjectContext 在 SQlite 数据库中保存数据。
如果您需要比 CoreData 更高级别的抽象,您可以使用 CoreData 的包装器,检查 here for some popular libraries. Any sensitive data, like user credentials, should be stored in a keychain。
我想知道我是否可以通过在 Core Data 中存储 User
对象的方式制作我的应用程序结构,而无需从视图控制器的角度了解 NSManagedObjectContext。
我想像他们在某些框架(例如 Parse)中那样做。您可以使用 [object save] 或 [object pin] 等简单方法在本地保存其对象。
我知道对于一些更复杂的对象,我肯定希望在视图控制器中控制 NSManagedObjectContext。但是如果 ob 只是将 User
保存为 currentUser 并在以后检索,我真的想以某种方式将 NSManagedObjectContext 封装在对象本身中。
所以不用方法
[User createCurrentUserInContext:self.context]
或
[User currentUserInContext:self.context]
我只想打电话
[User createCurrentUser]
或
[User currentUser]
你能给我一些建议吗?我期待从您那里听到尽可能多的解决方案。
感谢您的帮助
如果只想保存当前用户对象,我认为最简单的方法是使用 NSUserDefaults。
您可以轻松地保存和检索对象,只需要几行代码。
看看这个教程,它可能会帮助你实现它。
http://swiftcoder.me/2014/08/17/persisting-data-with-nsuserdefaults/
我认为您想要一个框架,其理念与 Apple 设计 Core Data 的方式所反映的理念不同。该框架旨在成为一个对象图(而不是 "database")。上下文用作 "scratch pad" 进行更改,独立于任何存储详细信息。
视图控制器可以访问它们显示的对象、读取它们的属性并更改以响应用户交互,这是有道理的。上下文是管理多线程、撤消管理器和其他强大功能的便捷构造。
您描述的范例更符合 ActiveRecord 的思路。这实际上是一个偏好问题,因为这两种方法都有优点和缺点。 (我不想展开这些,因为这主要是基于意见,不适合 Whosebug 格式。)
如果您想要 user.save()
之类的东西,请查看 MagicalRecord。这是一个非常流行的框架,它试图将 ActiveRecord 惯用法带入 Core Data。我不是粉丝,虽然我用过几次都没有大问题。
如果您需要大型本地对象存储,则必须处理数据库 SQlite3,而 CoreData 是一个很好的包装器,它简化了 SQlite3 的操作。 Parse Local Datastore 是 implemented with SQlite3,所以对象固定基本上是调用通过 NSManagedObjectContext 在 SQlite 数据库中保存数据。
如果您需要比 CoreData 更高级别的抽象,您可以使用 CoreData 的包装器,检查 here for some popular libraries. Any sensitive data, like user credentials, should be stored in a keychain。