2017-08-14 50 views
0

我是CoreData中的新成員,我試圖只讀取一列數據。我使用下面的代碼嘗試:如何只讀取一列Core Data中的數據使用swift 3

//MARK :- Fetch All Calculation 
func fetchUniqueParentAxis(testID : String) -> [String] { 

    var arrAxis : [String] = [] 

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "TesCalculation") 
    fetchRequest.predicate = NSPredicate(format: "testID == %@ ",testID) 
    fetchRequest.includesPropertyValues = true 
    fetchRequest.returnsObjectsAsFaults = false 
    fetchRequest.propertiesToFetch = ["parentAxis"] 

    do { 
     calculation = try AppDelegate.getContext().fetch(fetchRequest) as! [TesCalculation]//try AppDelegate.getContext().fetch(fetchRequest) as! [String : AnyObject] 
    } 

    catch let error { 
     //Handle Error 
     Helper.sharedInstance.Print(error as AnyObject) 
    } 
}. 

「parentAxis」是我的一欄,我想只獲取該列的數據。

回答

1

核心數據是一個對象模型。它將sql數據庫的行轉換爲具有屬性的對象。你不是直接在SQL上運行查詢,所以你不能在你可以用SQL做的核心數據中做所有事情。你與和數據庫交互的對象進行交互。在覈心數據中,你可以有一個沒有錯誤的對象。這意味着它的任何屬性都不會被加載到內存中,但是當你需要它們時(當你訪問一個屬性時)它會從數據庫中獲取它。您不能擁有僅設置其某些屬性的對象。它們要麼全部設置(即故障),要麼沒有設置(它沒有故障)。

只有取一列或兩列真的沒有太大的收穫。額外的數據傳輸通常很少。唯一的例外是當你有一個龐大的數據blob作爲對象的屬性。在這種情況下,您應該將blob存儲在一個單獨的實體中,併爲其提供一對一的關係。這樣,昂貴的數據塊在被請求之前不會被加載到內存中。

+0

然後在那裏,我可以通過 – kishor0011

+0

列在覈心數據讀取的任何備選方案,列是屬性,行是對象。沒有對象的財產沒有意義。 –

+0

謝謝你解釋我。 – kishor0011

0

您可以絕對地在CoreData中獲取列的子集。是的,我同意Core Data IS對象圖解決方案可以使用 SQLite作爲存儲引擎。然而,獲取數據的子集而不是整個NSManagedObject已經可以在CoreData中進行很長時間,但最近的變化使其略微與以前的不同。

let fetchRequest = NSFetchRequest<NSDictionary>(entityName: TesCalculation.entity().name!) 
fetchRequest.resultType = .dictionaryResultType 
fetchRequest.predicate = NSPredicate(format: "testID == %@ ",testID) 
fetchRequest.propertiesToFetch = ["parentAxis"] 
do { 
    let results = try AppDelegate.getContext().fetch(fetchRequest) 
} catch let error as NSError { 
    print(error) 
} 

什麼這將返回你的東西,看起來像這樣:

[ 
    { 
     "parentAxis": "abc" 
    }, 
    { 
     "parentAxis": "xyz" 
    } 
] 

問題是不是提高性能(即使有可能,我真的不知道!),而是如果/如何做到這一點,這是如何做到的。此外,我不同意其他聲明,認爲「沒有對象的財產是沒有意義的」。有很多情況下,你正在分配的對象,你需要的只是一個或兩個屬性。如果您在多個商店之間鬆散地耦合實體,這也派上用場。當然,還有其他的方法(你的xcdatamodel的Fetched Properties),所以它真的取決於用例。

只是爲了表明它已經存在了一段時間,這是的NSFetchRequestNSFetchRequestResultType頭:

@available(iOS 3.0, *) 
public static var dictionaryResultType: NSFetchRequestResultType { get } 
相關問題