CoreData - Fetching檢索數(shù)據(jù)(4)

根據(jù)條件檢索數(shù)據(jù)
異步讀取
批量更新與刪除

獲取不同的結(jié)果類型
所有這一次,你可能一直在考慮NSFetchRequest作為一個(gè)相當(dāng)簡(jiǎn)單的工具。你給它一些說(shuō)明,你會(huì)得到一些對(duì)象作為回報(bào)。還有什么呢
如果是這樣,你一直低估這個(gè)課程。 NSFetchRequest是多功能瑞士軍刀的Core Data框架!您可以使用它來(lái)獲取單個(gè)值,計(jì)算數(shù)據(jù)的統(tǒng)計(jì)信息,如平均值,最小值和最大值等等。
你怎么可能呢? NSFetchRequest有一個(gè)名為resultType的屬性。到目前為止,您只使用了默認(rèn)值NSManagedObjectResultType。以下是提取請(qǐng)求的結(jié)果類型的所有可能值:
?NSManagedObjectResultType:返回受管對(duì)象(默認(rèn)值)。
?NSCountResultType:返回與提取匹配的對(duì)象的計(jì)數(shù)
請(qǐng)求。
?NSDictionaryResultType:這是一個(gè)全部返回類型,用于返回不同計(jì)算的結(jié)果。
?NSManagedObjectIDResultType:返回唯一的標(biāo)識(shí)符,而不是完整的受管對(duì)象。
我們回到示例項(xiàng)目并在實(shí)踐中應(yīng)用這些概念。
在示例項(xiàng)目運(yùn)行時(shí),點(diǎn)擊右上角的過濾器以顯示過濾器屏幕的UI。您現(xiàn)在不會(huì)實(shí)現(xiàn)實(shí)際的過濾器/排序。相反,您將專注于以下四個(gè)標(biāo)簽:

過濾屏幕分為三個(gè)部分:價(jià)格,最受歡迎和排序。最后一節(jié)沒有在技術(shù)上由“過濾器”組成,但排序通常與過濾器并列,所以我們將這樣離開。 :]
在每個(gè)價(jià)格過濾器下面的空間是屬于該價(jià)格類別的場(chǎng)地總數(shù)。同樣地,所有場(chǎng)地的交易總數(shù)都有所增加。你會(huì)實(shí)現(xiàn)這些。

正如您在前幾章中所了解的,從Core Data獲取記錄的方法是創(chuàng)建一個(gè)NSFetchRequest實(shí)例,根據(jù)需要進(jìn)行配置,然后將其轉(zhuǎn)交給NSManagedObjectContext,為您提供重要的解決方案。
夠簡(jiǎn)單吧? 實(shí)際上有四種不同的方式來(lái)獲取提取請(qǐng)求。 一些比其他人更受歡迎,但您可能會(huì)在某些時(shí)候遇到所有這些作為核心數(shù)據(jù)開發(fā)人員。
在跳到本章的啟動(dòng)項(xiàng)目之前,讓我們快速了解設(shè)置擷取請(qǐng)求的不同方式,以免引起驚喜。 它們?cè)谙旅嬲故荆?/p>

//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. 在第一個(gè)示例中,您初始化NSFetchRequest的實(shí)例,就像它是任何其他對(duì)象一樣。至少,您必須為提取請(qǐng)求指定NSEntityDescription。在這種情況下,實(shí)體是Person。您初始化NSEntityDescription的實(shí)例,并使用它來(lái)設(shè)置提取請(qǐng)求的實(shí)體屬性。

  2. 你使用NSFetchRequest的便利構(gòu)造器。它初始化新的提取請(qǐng)求,并在一個(gè)步驟中設(shè)置其實(shí)體屬性。您只需要為實(shí)體名稱提供一個(gè)字符串,而不是一個(gè)完整的NSEntityDescription。

  3. 在第三個(gè)示例中,您從NSManagedObjectModel中檢索提取請(qǐng)求。您可以在Xcode的數(shù)據(jù)模型編輯器中配置和存儲(chǔ)常用的抓取請(qǐng)求。本章稍后將介紹如何做到這一點(diǎn)。

  4. 最后一種情況與第三種情況相似。您可以從托管對(duì)象模型獲取提取請(qǐng)求,但這次您傳遞一些額外的變量。在謂詞中使用這些“替換”變量來(lái)優(yōu)化獲取的結(jié)果。
    前兩個(gè)例子是您已經(jīng)看到的簡(jiǎn)單例子。除了存儲(chǔ)的提取請(qǐng)求和NSFetchRequest的其他技巧外,您還將在本章的其余部分中看到更多的這些簡(jiǎn)單的案例!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容