2015-06-23 36 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可能包含几个离散年份,那么第一个选项可能是最好的。