Ios 从多个关系中获取N实体描述
我有一个名为“recordings”的用户实体,它有一个对多关系 生成的界面如下所示:Ios 从多个关系中获取N实体描述,ios,core-data,Ios,Core Data,我有一个名为“recordings”的用户实体,它有一个对多关系 生成的界面如下所示: @interface User : NSManagedObject @property (nonatomic, retain) NSString * display_name; // ... @property (nonatomic, retain) NSSet *recordings; // <-- this one @end @interface User (CoreDataGeneratedAc
@interface User : NSManagedObject
@property (nonatomic, retain) NSString * display_name;
// ...
@property (nonatomic, retain) NSSet *recordings; // <-- this one
@end
@interface User (CoreDataGeneratedAccessors)
- (void)addRecordingsObject:(Recording *)value;
- (void)removeRecordingsObject:(Recording *)value;
- (void)addRecordings:(NSSet *)values;
- (void)removeRecordings:(NSSet *)values;
@end
我将@“Recording”
实体名称传递给insertNewObjectForEntityForName::
,这样就可以了;但是,我不喜欢我的对象知道其.recordings
关系属性的实际实体名称
有没有一种简单的方法可以说“为此关系创建一个新对象”您可以查看它添加的方便方法,这些方法允许您向NSManagedObject子类询问其实体名称。这将是对当前代码的最小更改
否则,您将使用实体描述来获取
关系语法名称
,使用关联关系描述来获取目的属性
,然后获得所需的名称
。您可以将其添加为一个category方法,以便轻松访问。如果您不想像@Wain建议的那样使用mogenerator,您可以镜像它的方法。在录制
上编写一个类方法,以创建与特定用户
相关的新录制
在录制.h
中:
+ (Recording *)insertInManagedObjectContext:(NSManagedObjectContext *)moc;
+ (Recording *)insertWithUser:(User *)user;
在录制.m中
:
+ (Recording *)insertInManagedObjectContext:(NSManagedObjectContext *)moc
{
Recording *recording = [NSEntityDescription
insertNewObjectForEntityForName:@"Recording"
inManagedObjectContext:moc];
return recording;
}
+ (Recording *)insertWithUser:(User *)user
{
// an NSManagedObject subclass knows its MOC
Recording *recording = [self insertInManagedObjectContext:user.managedObjectContext];
[recording.users addRecordingsObject:recording];
return recording;
}
您还需要编写一个方法,使用任何合适的uniquing条件(“查找或创建”模式)搜索现有的录制
对象,并在+insertWithUser:
中调用该方法,而不是总是插入新的录制
+ (Recording *)insertInManagedObjectContext:(NSManagedObjectContext *)moc
{
Recording *recording = [NSEntityDescription
insertNewObjectForEntityForName:@"Recording"
inManagedObjectContext:moc];
return recording;
}
+ (Recording *)insertWithUser:(User *)user
{
// an NSManagedObject subclass knows its MOC
Recording *recording = [self insertInManagedObjectContext:user.managedObjectContext];
[recording.users addRecordingsObject:recording];
return recording;
}