在我的app委托中,我有以下3个属性.
@property (Readonly,strong,nonatomic) NSManagedobjectContext *managedobjectContext;@property (Readonly,nonatomic) NSManagedobjectModel *managedobjectModel;@property (Readonly,nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
我觉得使用这些对象的最佳方法是将它们注入需要从CoreData内部访问数据的所有相关视图控制器的构造函数中.
我能想到的最干净的方法是为我的数据模型中的每个表创建一种Repository类,它将容纳上述3个对象并提供访问表数据的辅助方法,例如: fetchAllTeams().然后可以将这些存储库类注入相关的视图控制器,而不是注入上面的所有3个对象.
这听起来像是在CoreData& Objective-C的?
还有什么是创建这些存储库类的最佳方法,我应该从appDelegate中删除默认的核心数据代码和属性(自动生成)并将它们放在抽象存储库类中.
如果存储库的每个实例都有自己的NSPersistentStoreCoordinator,NSManagedobjectModel和NSManagedobjectContext版本,或者应该在appDelegate传入的所有存储库实例之间共享这些对象的单个实例.
解决方法 首先,Core-Data为您设置的基本代码可能会使整个事情变得非常混乱.需要了解的是Core-Data是一种围绕各种数据库技术(sqlite,binary,xml)的包装器,通过这种方式,您可以免除直接触摸数据库的需要.您将在开始时担心的主要类是NSManagedobjectContext.您可以将其视为底层数据库的快照,您可以根据需要进行修改,并在完成后将NSManagedobjectContext写入数据库.你在那里的其他课程实际上只需要更细粒度,低级别的控制,因为这是你的第一个应用程序,最好不要管它们.你应该 read this,它很大,但你会从中获得很多的理解,尤其是一切如何连接和他们的角色.总结一下:
>实际上你只需要传递NSManagedobjectContext
>你可以在每个VIEw Controller中创建一个实例变量,OR,
>你不应该为每个应用程序制作多个,除非你真的需要,然后你需要确保你将它们合并在一起
>你真的不需要创建所有对象的存储库,因为NSManagedobjectContext会为你做这个……有点……它会有条件地将对象加载到内存中,这里有很多但是开始的地方是学习什么一个错误(所有在NSManagedobjectContext或NSManagedobject下的Apples文档中)
>考虑你的对象代表什么和做什么.您可以将NSManagedobject子类化以表示您的Core-Data对象并将逻辑和验证放在其中 – 非常方便.
>查看NSFetchRequest和nspredicate等类,它们是从NSManagedobjectContext中获取对象的两个核心类.
>查看类似NSFetchedResultsController的类,它可以非常好地绑定到UI对象,如UItableVIEw.
最后,Core-Data是一个野兽,通常你会发现自己一直在重复常见的任务.您应该查看this excellent framework,它添加了各种帮助程序(如一个易于访问的NSManagedobjectContext实例,以及一个行对象提取,创建,删除).
总结以上是内存溢出为你收集整理的ios – 核心数据设计模式全部内容,希望文章能够帮你解决ios – 核心数据设计模式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)