【问题标题】:To retrieve the values for only one property of an entity in Core Data of iOS在 iOS 的 Core Data 中仅检索实体的一个属性的值
【发布时间】:2012-03-31 04:24:58
【问题描述】:

我有一个名为“Records”的实体,它有一个 NSDecimalNumber 类的名为“amount”的属性。

当然,“记录”还有其他属性,例如“姓名”、“日期”等。

现在我只需要获取所有“记录”的 amount 属性来总结它们,

为了获得更好的性能,我只需要“金额”的值,而不关心名称或日期。

那我该怎么办呢?

这是我的代码,但我猜他们不够专业。

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TransferRecord"];
request.includesSubentities = NO;
[request setPropertiesToFetch:[NSArray arrayWithObject:@"amount"]];
//    [request setReturnsObjectsAsFaults:NO];  // I don't know whether I shoud use this
[request setResultType:NSDictionaryResultType];
NSError *error = nil;
NSArray *temp = [self.fetchedResultsController.managedObjectContext executeFetchRequest:request error:&error];
if (temp) {
//        NSDecimalNumber *allTrans = [NSDecimalNumber zero];
//        for (NSDecimalNumber *one in [temp valueForKey:<#(NSString *)#>)
    NSLog(@"%@",[temp description]);

而且我不清楚“故障”是什么意思。

【问题讨论】:

    标签: core-data attributes sum fetch faults


    【解决方案1】:

    伊诺,

    您如何知道标准提取速度不足以满足您的需求?您是否使用 Instruments 确定提取是问题? (我问是因为让 CD 应用程序运行得更快的标准方法,尤其是在 iOS 上,是通过使用更简单的谓词来获取更多数据。然后使用对 RAM 中的项目进行集合操作来优化查询。)

    如果你仔细想想,你就会明白为什么。行存储在磁盘上的连续字节中。这些行经常可以在同一个磁盘块中找到。因此,一次提取可能会获得许多行。磁盘获取是任何数据库查询的缓慢部分。在 iOS 上,flash 很慢。它不是为高性能分散收集数据库操作而设计的。 IOW,iOS 设备不是自己的操作系统的 SSD。顺便说一句,闪存上的提取会将超过 128k-256k 字节带入缓冲区。因此,获取更多行很容易而且相对较快。

    你上面的代码基本正确。

    您需要阅读有关 Core Data 故障的文档。它是系统中的一个基本概念。 Apple 的文档对故障的性质非常清楚。 Stack Overflow 是一个错误的地方来询问任何系统文档中涵盖的基本信息。

    安德鲁

    【讨论】:

    • Eno,作为新用户,您可能不知道接受答案的协议。这有利于那些花时间回答你问题的人。因此,如果您发现我的答案有用且完整,那么请您检查我上面的答案旁边的复选标记吗? (它在我答案开头的向上和向下箭头旁边。)安德鲁
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多