首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个关系中获取NSEntityDescription

从多个关系中获取NSEntityDescription
EN

Stack Overflow用户
提问于 2014-07-05 07:18:32
回答 2查看 143关注 0票数 1

我有一个用户实体与多个关系称为“录音”。

生成的接口如下所示:

代码语言:javascript
复制
@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

我将该用户保存在会话对象(singleton)中,该对象在整个应用程序中使用。为了添加记录,我创建了一个方便的方法,它将返回一个空的" recording“对象,然后可以由调用代码填充该对象:

代码语言:javascript
复制
- (Recording *)newRecording
{
    Recording *recording = [NSEntityDescription 
        insertNewObjectForEntityForName:@"Recording" 
        inManagedObjectContext:self.managedObjectContext];

    return recording;
}

我将@"Recording"实体名传递给insertNewObjectForEntityForName::,这很好;但是,我不喜欢我的对象知道其.recordings关系属性的实际实体名。

有没有一种简单的方法,我可以说“为这种关系创建一个新的对象”?

EN

回答 2

Stack Overflow用户

发布于 2014-07-05 20:21:03

您可以查看马达发生器及其添加的方便方法,这些方法允许您向NSManagedObject子类查询其实体名称。这将是对当前代码的最小更改。

否则,您将使用实体描述来获取relationshipsByName,使用关联的关系描述获取destinationEntity,然后得到所需的name。您可以将它添加为一个类别方法,这样就可以轻松地访问它。

票数 1
EN

Stack Overflow用户

发布于 2014-07-06 04:06:47

如果您不想像@Wain建议的那样使用mogenerator,您可以使用它的方法。在Recording上编写一个类方法来创建一个与特定User相关的新Recording

Recording.h

代码语言:javascript
复制
+ (Recording *)insertInManagedObjectContext:(NSManagedObjectContext *)moc;
+ (Recording *)insertWithUser:(User *)user;

Recording.m

代码语言:javascript
复制
+ (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;
}

您还需要编写一个方法,使用任何合适的惟一条件(“查找或创建”模式)搜索现有的Recording对象,并在+insertWithUser:中调用该方法,而不是总是插入新的Recording

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24584029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档