核心数据:如何创建托管对象而不通过字符串引用实体

时间:2013-01-06 04:39:14

标签: ios xcode core-data

为了提高代码的可读性,我一直在为我的实体生成核心数据类,因此我可以使用getter和setter(我个人使用点表示法)而不是setValue: forKey:

来访问它们。

例如,而不是[aDateObject setValue:nameString forKey:@"name"];
我将使用:aDateObject.name = nameString;


我想知道是否有一种等效的方法可以将新的托管对象插入到托管对象上下文中。例如,我目前使用以下内容创建新的DateTimeFlightDataType

    aDateObject = (DateTimeFlightDataType*)[NSEntityDescription insertNewObjectForEntityForName:@"DateTimeFlightDataType"
                                                                         inManagedObjectContext:self.managedObjectContext];

有没有办法使用我的类(DateTimeFlightDataType)而不是实体字符串名称来创建和插入此对象以保持一致性?

2 个答案:

答案 0 :(得分:6)

你可以写:

NSString *name = NSStringFromClass([DateTimeFlightDataType class]);
NSManagedObjectContext *ctx = self.managedObjectContext;
aDateObject = [NSEntityDescription insertNewObjectForEntityForName:name 
                                            inManagedObjectContext:ctx];

答案 1 :(得分:1)

创建MO总是需要一个实体,并且这些实体总是由字符串定义。

常见的方法是以某种方式使它成为字符串不需要硬编码但可以从MO的类派生..通常使用NSStringFromClass