【问题标题】:CoreData: many-to-many relationshipCoreData:多对多关系
【发布时间】:2011-09-15 19:11:22
【问题描述】:

我有 2 个对象,具有多对多关系。

这是我的代码:

+ (NSSet *)activitiesSetForMember:(Members *)member inManagedObjectContext:(NSManagedObjectContext *)context{
NSSet *activitiesSet = nil;

NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"CompanyActivity" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"hasMembers contains %@", member];
NSError *error = nil;
activitiesSet = [[context executeFetchRequest:request error:&error] lastObject];
[request release];

NSLog(@"count: %d", [activitiesSet count]);

//se o array vem vazio (nil), não existe a o tipo de Membro
if (!error && !activitiesSet)
    NSLog(@"Error: Member has no Activities related.");

return activitiesSet;   
}

如何从选定的Member 中获取所有Activities?我怎样才能构造请求给我呢?

【问题讨论】:

    标签: core-data many-to-many nspredicate


    【解决方案1】:

    您可能已经怀疑,您的谓词有问题:

    也许您因为命名关系的方式而感到困惑。这些名称似乎表明存在一些概念上的混乱。让我建议您像这样重命名您的实体和关系:

    Members         - Member
    CompanyActivity - Activity
    memberActivity  - activities
    hasMembers      - members
    

    有一个更好的解决方案。属性活动不是已经包含您想要的活动吗?因此:

    activitiesSet = member.activities; // according to my naming scheme
    

    【讨论】:

    • 谢谢。第一个建议很好。我是CD的新手。第二条评论是正确的。不需要取。谢谢,RL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多