3

在此处输入图像描述

我目前有两个实体,分别称为 Person 和 Rem。

Person 实体与 Rem 有一个名为 theRem 的关系,并且 Person 是一个父事件。

Rem 实体有一个名为 Date 的属性,我需要使用 Person 实体检索它,我该怎么做?

这是我的代码:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.  
NSManagedObjectContext *managedObjectContext=[appDelegate managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"Date" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
 //Fetch from core data in background thread
NSError *error;
allArray = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

我知道上面的代码不起作用,但是在我阅读的苹果文档的某个地方我可以尝试这样的事情

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:@"theRem.Rem" ascending:YES];

谁能帮我吗?谢谢

4

2 回答 2

1

我没有尝试过,但它应该可以工作,考虑到关系的名称 from Personto Remis hasRemand dateis a property ofRem

[request setPropertiesToFetch:@[@"hasRem.date"]];

请参阅:获取不同值的链接

于 2013-05-23T10:14:26.747 回答
0

我猜您将谓词与排序描述符混淆了。创建谓词时,您可以指定一个键路径 ( @"theRem.date") 以访问您的关系对象属性。排序描述符并非如此。
由于您有 person 对象,因此要访问关系对象的日期,请使用以下代码:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.  
NSManagedObjectContext *managedObjectContext=[appDelegate managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error;
allArray = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

//Fetch the date for all person objects

for (Person *perObj in allArray){
   NSLog("Date of rem: %@", perObj.theRem.date);
}

// 如果你没有创建 Person 类,你也可以使用下面的 for 循环来代替:

for(NSManagedObject *perObj in allArray){
   NSLog("Date of rem: %@", [[perObj valueForKey:@"theRem"] valueForKey:@"date"]];
}
于 2013-05-23T11:05:52.713 回答