0

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

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

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

4

1 回答 1

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实体添加一个名为insertionDate(类型NSDate)的属性,该属性允许您按日期排序。

当你执行请求时

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

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

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

希望有帮助。

于 2012-06-20T08:26:20.673 回答