2013-04-24 85 views
0

我正在尝试构建一个通用的SyncEngine。在这里面,我取给定父实体如下:如何获取CoreData子实体并找到它们的类名?

__block NSArray *newRecords = nil; 
[[[CoreDataController sharedInstance] managedObjectContext] performBlockAndWait:^{ 
    NSError *error = nil; 
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:className]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"serverID = nil"]; 
    [request setPredicate:predicate]; 
    newRecords = [[[CoreDataController sharedInstance] managedObjectContext] executeFetchRequest:request error:&error]; 
}]; 

我正在寻找一种方式来做到以下几点:

  1. 测试如果检索实体都有一套“儿童”的。
  2. 如果是这样 - 我想查找其子女的班级名称。

有没有办法做到这一点?

+0

您的意思是子实体(className是父实体)还是通过关系链接的实体? – Mundi 2013-04-24 06:59:27

+0

我不确定我是否了解区别... – 2013-04-24 18:48:04

+0

className是一个与另一个实体(模型中定义)有关系的实体(NSManagedObject)。我从CoreData中获取className(在上面的代码中)并想要一种获取子实体名称的方法 – 2013-04-24 18:49:28

回答

0

您的子实体具有相同的基类。
NSString类型的基类上添加一个属性(我们称它为className)。

<BaseEntity>.h(生成文件进入编辑器 - >创建NSManagedObject子类):
实施- (void) awakeFromInsert像这样:

- (void) awakeFromInsert 
{ 
    self.className = self.entity.name; 
} 

你的读取请求,现在应该是:

NSExpressionDescription* idDesc = [NSExpressionDescription new]; 
[idDesc setName:@"objectID"]; 
[idDesc setExpression:[NSExpression expressionForEvaluatedObject]]; 
[idDesc setExpressionResultType:NSObjectIDAttributeType]; 

NSFetchRequest* request = [NSFetchRequest alloc] initWithEntityName:@"<BaseEntity>"]; 
request.predicate = [NSPredicate predicateWithFormat:@"parent = %@",parent.objectID]; 
[request setResultsType:NSDictionaryResultType]; 
[request setPropertiesToFetch:@[@"className",idDesc]]; 

此请求将返回包含您请求的数据的字典数组。

相关问题