我无法为不相关的实体执行CoreData提取请求。让我们假设我有一个包含3个实体的对象模型:Message
,User
和Advisor
。
我希望这三个对象彼此无关。因此,Message
确实具有属性senderEmail
和receiverEmail
,而User
和Advisor
具有属性email
。
但同样,这些对象之间没有进一步的关系
我现在想要例如由顾问或用户获取最新的(最新的)Message
。但是,如果没有连接对象,我该怎么做这个获取谓词呢?
这在一个获取请求中是否可能,或者我是否需要将每个对象分别提取到一个数组中,然后进行进一步操作以获得我想要的内容?
答案 0 :(得分: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
enitity一个名为insertionDate
(类型为NSDate
)的属性,即可按日期排序。
执行请求时
NSArray* results = [messageFetch executeFetchRequest:&error];
数组results
将包含您要查找的(仅)Message
元素。
为什么需要将这些实体分开?
希望有所帮助。