CoreData|CoreData - Fetching检索数据(4)

根据条件检索数据
异步读取
批量更新与删除
获取不同的结果类型
所有这一次,你可能一直在考虑NSFetchRequest作为一个相当简单的工具。你给它一些说明,你会得到一些对象作为回报。还有什么呢
如果是这样,你一直低估这个课程。 NSFetchRequest是多功能瑞士军刀的Core Data框架!您可以使用它来获取单个值,计算数据的统计信息,如平均值,最小值和最大值等等。
你怎么可能呢? NSFetchRequest有一个名为resultType的属性。到目前为止,您只使用了默认值NSManagedObjectResultType。以下是提取请求的结果类型的所有可能值:
?NSManagedObjectResultType:返回受管对象(默认值)。
?NSCountResultType:返回与提取匹配的对象的计数
请求。
?NSDictionaryResultType:这是一个全部返回类型,用于返回不同计算的结果。
?NSManagedObjectIDResultType:返回唯一的标识符,而不是完整的受管对象。
我们回到示例项目并在实践中应用这些概念。
在示例项目运行时,点击右上角的过滤器以显示过滤器屏幕的UI。您现在不会实现实际的过滤器/排序。相反,您将专注于以下四个标签:
过滤屏幕分为三个部分:价格,最受欢迎和排序。最后一节没有在技术上由“过滤器”组成,但排序通常与过滤器并列,所以我们将这样离开。 :]
在每个价格过滤器下面的空间是属于该价格类别的场地总数。同样地,所有场地的交易总数都有所增加。你会实现这些。
正如您在前几章中所了解的,从Core Data获取记录的方法是创建一个NSFetchRequest实例,根据需要进行配置,然后将其转交给NSManagedObjectContext,为您提供重要的解决方案。
够简单吧? 实际上有四种不同的方式来获取提取请求。 一些比其他人更受欢迎,但您可能会在某些时候遇到所有这些作为核心数据开发人员。
在跳到本章的启动项目之前,让我们快速了解设置撷取请求的不同方式,以免引起惊喜。 它们在下面展示:

//1 let fetchRequest1 = NSFetchRequest() let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedObjectContext)! fetchRequest1.entity = entity //2 let fetchRequest2 = NSFetchRequest(entityName: "Person") //3 let fetchRequest3 = managedObjectModel.fetchRequestTemplateForName("peopleFR") //4 let fetchRequest4 = managedObjectModel.fetchRequestFromTemplateWithName("peopleFR", substitutionVariables: ["NAME" :"Ray"])

  1. 在第一个示例中,您初始化NSFetchRequest的实例,就像它是任何其他对象一样。至少,您必须为提取请求指定NSEntityDescription。在这种情况下,实体是Person。您初始化NSEntityDescription的实例,并使用它来设置提取请求的实体属性。
  2. 你使用NSFetchRequest的便利构造器。它初始化新的提取请求,并在一个步骤中设置其实体属性。您只需要为实体名称提供一个字符串,而不是一个完整的NSEntityDescription。
  3. 在第三个示例中,您从NSManagedObjectModel中检索提取请求。您可以在Xcode的数据模型编辑器中配置和存储常用的抓取请求。本章稍后将介绍如何做到这一点。
  4. 【CoreData|CoreData - Fetching检索数据(4)】最后一种情况与第三种情况相似。您可以从托管对象模型获取提取请求,但这次您传递一些额外的变量。在谓词中使用这些“替换”变量来优化获取的结果。
    前两个例子是您已经看到的简单例子。除了存储的提取请求和NSFetchRequest的其他技巧外,您还将在本章的其余部分中看到更多的这些简单的案例!

    推荐阅读