2015-06-23 38 views
1

的屬性我有這樣的核心數據對象核心數據NSPredicate對於數組類型

class Foo: NSManagedObject { 

    @NSManaged var YearRange: AnyObject? // [2000,2015] 
} 

我需要知道,如果2005年在NSManagedObject財產YearRange的範圍。

這是我取:

let request :NSFetchRequest = NSFetchRequest(entityName:"Foo") 

    let Predicate = NSPredicate(format: "xxx", "xxx") 

    request.predicate = Predicate 

    var error: NSError? = nil 
    var matches: AnyObject = self.managedObjectContext!.executeFetchRequest(request, error: &error)! 

    if (error == nil && matches.count > 0){ 

     println(matches) 
    } 

什麼是NSPredicate格式,可以幫助我嗎?

+0

看看這個,你可以在你的'NSPredicate'中使用'IN'屬性http://stackoverflow.com/questions/6130900/filter-core-data-results-by-property-in-array – sbarow

回答

4

由於CoreData本身不支持數組屬性,我假定YearRange被定義爲可變形。如果是這種情況,並且假設您正在使用SQLLite存儲,則不能使用基於YearRange的謂詞來過濾提取請求。 (Transformables作爲NSData blob存儲在SQL數據庫中,並且只有在加載到內存時纔會轉換回適當的對象類型。對於SQLLite存儲區,CoreData將任何謂詞編譯到獲取SQL中,並在數據庫本身中評估結果。 )

您有兩種選擇:1)您可以獲取所有對象,然後在內存中對其進行過濾,或者2)修改模型以將YearRange存儲爲CoreData本機類型(即。字符串,數字,日期等)。

如果YearRange數組的元素表示的開始和結束年的範圍內,那麼我推薦後者選項,用兩個整數屬性:​​和yearRangeEnd。如果YearRange可能包含幾個離散年份,那麼第一個選項可能是最好的。