如何将核心数据中的实体保存并应用关系?
我试图find关于如何让用户dynamic地添加对象并应用必要的关系的苹果文档/教程,但需要一些帮助什么教程是好的或什么苹果文档将帮助。
我的核心数据问题的一个例子:2 Photographer
和Photo
实体, Photographer
和Photo
之间存在一对多的关系。 当用户添加Photo
,我需要能够指定哪个Photographer
拍摄该Photo
。
所以首先你要为照片创build一个新的实体:
NSManagedObject *photoObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
如果你有一个子类,NSManagedObject可以用你的Photo对象代替。 您将设置它的所有属性。 要设置摄影师,您将设置为任何其他属性。 如果你没有摄影师的参考,你可以这样查询:
NSFetchRequest *query = [[NSFetchRequest alloc] initWithEntityName:@"Photographer"]; [query setPredicate:[NSPredicate predicateWithFormat:@"id == %@", photographerId]]; NSArray *queryResults = [context executeFetchRequest:bcQuery error:&error];
您的查询结果将有摄影师的对象。 然后,您可以将其设置在您的photoObject上作为任何其他属性,链接将自动创build。
[photoObject setPhotographer:[queryResults objectAtIndex:0]];
或者如果你正在使用NSManagedObject:
[photoObject setValue:[queryResults objectAtIndex:0] forKey:@"photographer"];
CoreData的酷炫之处在于它是关系型的。 你不能把它想象成典型的DBMS。 您可以创build对象并以非常面向对象的方式设置它们之间的关系。 没有主键/外键来处理,这些都是由CoreData在后台完成的。
编辑:
您可以select创buildNSManagedObject的子类,以更轻松地访问您的实体的属性和关系。 确保在CoreData模型浏览器中指定这个子类; 在侧边栏中,您将“类”字段更改为新的子类。
这是一个NSManagedObject子类的例子:
//Interface @interface Photo : NSManagedObject #pragma mark - Attributes @property (nonatomic, strong) NSNumber *id; @property (nonatomic, strong) NSString *name; #pragma mark - Relationships @property (nonatomic, strong) NSSet *someToManyRelationship; @property (nonatomic, strong) Photographer *photographer; @end //Implementation @implementation Photo @dynamic id, name; @dynamic someToManyRelationship, photographer; @end
希望这可以帮助!