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

时间:2016-01-31 19:14:08

标签: ios objective-c core-data nsmanagedobjectcontext

我想知道我是否可以在核心数据中存储User对象的方式构建我的应用程序结构,而不必从视图控制器的角度了解NSManagedObjectContext。

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

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

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

我只想打电话给 [User currentUser]
{{1}}

你能给我一些建议。我期待着尽可能多地听到您的解决方案。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

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

视图控制器可以访问它们显示的对象,读取它们的属性并更改响应用户交互。上下文是管理多线程,撤消管理器和其他强大功能的便捷结构。

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

如果您需要user.save()之类的内容,请查看MagicalRecord。这是一个非常流行的框架,试图将ActiveRecord成语带入Core Data。我不是粉丝,虽然我已经使用了几次而没有出现重大问题。

答案 1 :(得分:1)

如果你需要一个大的本地对象存储,你必须处理数据库,SQlite3和CoreData是一个很好的包装器,它简化了SQlite3的操作。解析本地数据存储区为implemented with SQlite3,因此对象固定基本上是通过SQlite db中的NSManagedObjectContext调用来保存数据。

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

答案 2 :(得分:0)

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

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

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