如何将核心数据中的实体保存并应用关系?

我试图find关于如何让用户dynamic地添加对象并应用必要的关系的苹果文档/教程,但需要一些帮助什么教程是好的或什么苹果文档将帮助。

我的核心数据问题的一个例子:2 PhotographerPhoto实体, PhotographerPhoto之间存在一对多的关系。 当用户添加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 

希望这可以帮助!