0

我正在尝试构建一个通用的SyncEngine. 在其中,我按如下方式获取给定的父实体:

__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. 如果是这样 - 我想找到它的孩子的班级名称。

有没有办法做到这一点?

4

1 回答 1

0

您的子实体属于同一基类。
在该类型的基类上添加一个属性NSString(让我们称之为className)。

在你的<BaseEntity>.h(生成文件去编辑器->创建 NSManagedObject 子类):像这样
实现:- (void) awakeFromInsert

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

您的 fetch 请求现在应该是:

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]];

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

于 2013-04-24T10:25:42.873 回答