Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何像在实体框架中一样,将属于核心数据中一个类文件中一个实体的方法分组?_Iphone_Entity Framework_Core Data - Fatal编程技术网

Iphone 如何像在实体框架中一样,将属于核心数据中一个类文件中一个实体的方法分组?

Iphone 如何像在实体框架中一样,将属于核心数据中一个类文件中一个实体的方法分组?,iphone,entity-framework,core-data,Iphone,Entity Framework,Core Data,在实体框架这样的核心数据中,如何将属于一个类文件中的一个实体的方法分组 在Linq中,我们可以将所有方法放在域对象类中并在核心数据中重用它们,有没有办法为不同的实体创建不同的类?或者我们只能使用谓词来检索 似乎我无法为数据模型中配置的每个实体定义类。我也不像hibernate那样可以通过ORM控制物理数据库模式。如果我错了,请纠正我,据我所知,我不相信核心数据可以做到这一点 那么,使用核心数据的优势是什么?Cocoa上是否有任何机制可以定义我的域对象类,例如主键、外键,然后创建数据库模式 核心数

在实体框架这样的核心数据中,如何将属于一个类文件中的一个实体的方法分组

在Linq中,我们可以将所有方法放在域对象类中并在核心数据中重用它们,有没有办法为不同的实体创建不同的类?或者我们只能使用谓词来检索

似乎我无法为数据模型中配置的每个实体定义类。我也不像hibernate那样可以通过ORM控制物理数据库模式。如果我错了,请纠正我,据我所知,我不相信核心数据可以做到这一点

那么,使用核心数据的优势是什么?Cocoa上是否有任何机制可以定义我的域对象类,例如主键、外键,然后创建数据库模式


核心数据似乎只能支持配置对象,但甚至无法通过核心数据配置物理数据库。

查看文档了解更多信息。您可以使用键路径来获取所需的值。还可以使用键路径对数组中的数据进行排序。为此,请看一看。否则,是的,只需更改NSPredicate并重新获取即可。

在核心数据模型中,您可以将实体实例化为以下类:

当核心数据从存储中获取对象时,它将尝试将它们创建为此类的实例(虽然不是那么简单,但核心数据会做一些技巧)

通过在新窗口中打开核心数据模型,然后选择“文件”->“新建文件”,可以为实体自动生成类文件:

您应该会看到一个新的“托管对象类”项:

选择此选项并选择要为其生成类的实体:

将生成一个具有各种属性的类,用于获取/设置实体上的属性:

如果您想添加自己的方法,我建议您将它们添加到单独的类别中。这是因为在添加新属性或更改实体时,通常需要重新生成这些核心数据类。如果直接向这些文件添加内容,则在下次生成这些文件时将丢失所做的更改

因此,创建一个名为Person+Additions的类别,或您认为合适的任何名称:

并将任何新方法或属性添加到此类:

请注意,您不能添加新的实例变量,但NSManagedObject具有在内部字典中获取/设置值的功能。见

因此,完成所有这些操作后,只需将从获取请求(或任何位置)获得的NSManagedObject转换为适当的类型:

#import "Person+Additions.h"

//...

Person *p = (Person *) [fetchResult objectAtIndex:0];
[p myCustomMethod];

//...
至于关于主键以及与物理数据库交互的其他问题,这并不是核心数据的真正目的。您不应该过多地考虑底层数据库,核心数据的级别应该更高。您可以定义模型,并通过API获取对象。主键和其他类似于此的“数据库-y”详细信息不会公开

如果希望完全控制数据库,则应使用sqlite API。但我想说,对于大多数应用程序来说,核心数据是更好的选择