【问题标题】:CoreData Fetch Predicate for unrelated entities不相关实体的CoreData Fetch Predicate
【发布时间】:2012-06-20 07:00:23
【问题描述】:

我无法为不相关的实体执行 CoreData 提取请求。假设我有一个包含 3 个实体的对象模型:MessageUserAdvisor

我希望这 3 个对象彼此无关。所以Message 确实有属性senderEmailreceiverEmailUserAdvisor 确实有属性email
但同样,这些对象之间没有进一步的关系。
例如,我现在想通过顾问或用户获取最新的(新闻)Message。但是,由于对象未连接,我应该如何执行此获取谓词?

这甚至可以在一个 Fetch Request 中实现,还是我需要将每个对象分别提取到一个数组中,然后进行进一步的操作以获得我想要的?

【问题讨论】:

    标签: core-data ios5 nspredicate


    【解决方案1】:

    亚历山大,

    如果这些实体彼此不相关,您需要执行不同的获取请求来获取您的数据。

    因此,例如,您可以获取最新的Message 设置请求,如下所示:

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"senderEmail == %@", grabbedEmail];
    
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"insertionDate" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    
    NSFetchRequest *messageFetch = [[NSFetchRequest alloc] init];
    [messageFetch setEntity:[NSEntityDescription entityForName:@"Message" inManagedObjectContext:yourContext]];
    [messageFetch setPredicate:predicate];
    [messageFetch setSortDescriptors:sortDescriptors];
    [messageFetch setFetchLimit:1];
    

    要检索grabbedEmail(如果没有),您需要使用特定谓词设置请求。这同样适用于接收方电子邮件。例如。

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"userId == %@", @"someUserId"];
    
    NSFetchRequest* userFetch = [[NSFetchRequest alloc] init];
    [userFetch setEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:yourContext]];
    [userFetch setPredicate:predicate];
    [userFetch setFetchLimit:1];
    
    NSArray* userResults = [userFetch executeFetchRequest:&error];
    
    User* retrievedUser = (User*)[userResults objectAtIndex:0];
    NSString* grabbedEmail = [retrievedUser email];
    

    要按日期排序,您可以简单地向Message 实体添加一个名为insertionDateNSDate 类型)的属性,允许您按日期排序。

    当你执行请求时

    NSArray* results = [messageFetch executeFetchRequest:&error];
    

    数组results 将包含(仅)您要查找的Message 元素。

    为什么您需要维护单独的这些实体?

    希望对您有所帮助。

    【讨论】:

    • 谢谢!我需要单独维护这些实体,因为我的模型包含比上述三个更多的实体。我不想拥有一个包含所有实体之间关系的巨大网格模型。所以我认为将一些关系建模为获取的属性可能会更好......
    • @Alexander 不客气,如果您发现日期建议有用,也请点赞。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2012-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多