【问题标题】:Core data: renaming a property while fetching核心数据:在获取时重命名属性
【发布时间】:2023-04-02 21:47:01
【问题描述】:

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

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;

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

请提出建议。

【问题讨论】:

    标签: cocoa-touch core-data nsfetchrequest


    【解决方案1】:

    你的预感是对的,还有另一种方法。 NSExpressionDescription 就是你要找的。​​p>

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

    【讨论】:

    • 瞧...正是我需要的:-)
    • 这个答案对我很有帮助,即使在今天我参考这个答案来实现类似的要求,所以我用我获得的一些积分来奖励它:)
    猜你喜欢
    • 2015-04-24
    • 2014-09-28
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多