1

我有两个具有以下关系的实体:

Contact <--> ContactMeta

在这里,Contact 的关系之一是“contactMeta”,而 ContactMeta 的属性之一是“操作”。

我在 Contact 实体上触发 fetchRequest。结果类型是 NSDictionaryResultType。

所以我得到了一个字典数组,我正在使用 NSJSONSerialization 对其进行序列化,并将其作为 JSON 请求发送到服务器。

现在,我将“contactMeta.operation”添加到 propertiesToFetch 列表中,因此字典中的键之一是“contactMeta.operation”。

问题是 -我需要在 JSON 请求中发送“操作”作为键,而不是“contactMeta.operation”。

我有一个选择——遍历列表中的每个字典,添加一个键——“操作”,其值为键“contactMeta.operation”的值,然后删除“contactMeta.operation”的键值。

但我对这种方法并不满意,并认为在 sqlite 中我们可以进行这样的查询:

Select first_name, last_name, contactmeta as operation from contact;

我们可以在核心数据中做类似的事情,还是有什么更聪明、更好的方法来实现我想要做的事情?

请建议。

4

1 回答 1

5

你的预感是对的,还有另一种方法。NSExpressionDescription 是您正在寻找的。

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
    [request setResultType:NSDictionaryResultType];
    NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"contactmeta"];
    NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
    [expressionDescription setName:@"operation"];
    [expressionDescription setExpression:keyPathExpression];
    [expressionDescription setExpressionResultType:NSUndefinedAttributeType];
    [request setPropertiesToFetch:@[@"first_name",@"last_name",expressionDescription]];
    NSError* error = nil;
    NSArray* rez = [context executeFetchRequest:request error:&error];
于 2013-02-20T09:27:06.083 回答