【问题标题】:What is an efficient way to get an array of property values from a core data entity?从核心数据实体获取属性值数组的有效方法是什么?
【发布时间】:2012-01-01 13:54:44
【问题描述】:

考虑以下几点:

NSFetchRequest *request = [[NSFetchRequest Alloc] init];
request.entity = [NSEntityDescription entityWithName:@"Person" inContext:_MOC];
request.propertiesToFetch = [NSArray arrayWithObject:@"Name"];
NSError *error = nil;
NSArray *results = [_MOC executeFetchRequest:request error:&error];

这将返回一个 Person 对象数组。我想要的是来自这些对象的Person.name 值数组。目前我遍历结果数组,提取名称并构建一个新数组。有没有更清洁、更快的方法来做到这一点?我曾考虑将 request.resultType 更改为 NSDictionaryResultType 但这并没有多大意义,因为我仍然需要将字典数组转换为我需要的数组。

我已经实现了上面的解决方案,所以真的在寻找更好的方法。如果正确的答案是“没有更好的方法”,那很好,只要确保我没有遗漏什么。谢谢!

编辑:在考虑这一点时,我质疑我是否需要一个值数组而不是只使用托管对象数组。无论如何,如果那里有一个很好的答案,仍然会很感激。

【问题讨论】:

    标签: ios core-data nsmanagedobject nsfetchrequest


    【解决方案1】:

    请求NSDictionaryResultType,然后使用生成的字典数组,只需请求[array valueForKey:@"name"]。当NSArray 接收到-valueForKey: 时,它会返回一个新的NSArray,该NSArray 是根据对其所有元素调用-valueForKey: 的结果创建的。

    【讨论】:

    • 很酷,没想到valueForKey 为你走过了阵列。这不是也适用于托管对象数组吗?
    • @XJones:我想是的,是的,但是如果你只是想提取一个属性,那么抓取字典而不是完整的托管对象几乎肯定更简单/更有效。
    • 也许吧,虽然不知道为什么。我已经将我的请求限制在我关心的财产上。就性能(速度和内存占用)而言,不知道 NSDictionary 与 NSManagedObject 是否会在这里产生重大影响。无论如何,感谢您的帮助!
    • 我希望有办法让获取请求本身返回值数组,但我认为这是不可能的。将valueForKey: 与数组一起使用是一个很好的优化,如果没有别的,我让框架为我遍历数组。 +1 并接受(除非出现直接从获取请求返回值数组的答案)。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2012-05-10
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多