Ios 类型数组的属性的核心数据NSPredicate

Ios 类型数组的属性的核心数据NSPredicate,ios,swift,core-data,nspredicate,nsfetchrequest,Ios,Swift,Core Data,Nspredicate,Nsfetchrequest,我有一个核心数据对象 class Foo: NSManagedObject { @NSManaged var YearRange: AnyObject? // [2000,2015] } 我需要知道2005年是否在NSManagedObject property YearRange的范围内 这是我的收获: let request :NSFetchRequest = NSFetchRequest(entityName:"Foo") let Predicate = N

我有一个核心数据对象

class Foo: NSManagedObject {

    @NSManaged var YearRange: AnyObject?  // [2000,2015]
}
我需要知道2005年是否在NSManagedObject property 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格式可以帮助我?

由于CoreData本身不支持数组属性,我假设
YearRange
定义为可转换的。如果是这种情况,并且假设您使用的是SQLLite存储,那么就不能使用基于
YearRange
的谓词来过滤获取请求。(可转换数据作为NSData BLOB存储在SQL数据库中,只有在加载到内存中时才会转换回相应的对象类型。对于SQLLite存储,CoreData将任何谓词编译到fetch SQL中,并在数据库中计算结果。因此谓词不能基于可转换数据。)

您有两个选项:1)您可以获取所有对象,然后在内存中对其进行过滤,或2)修改您的模型以将
YearRange
存储为CoreData本机类型(即字符串、数字、日期等)


如果
YearRange
数组的元素表示一个范围的起始年和结束年,那么我推荐后一个选项,它有两个整数属性:
yearRangeStart
yearRangeEnd
。如果
YearRange
可能包含几个离散的年份,那么第一个选项可能是最好的。

由于CoreData本身不支持数组属性,我假设
YearRange
被定义为可转换的。如果是这种情况,并且假设您使用的是SQLLite存储,那么就不能使用基于
YearRange
的谓词来过滤获取请求。(可转换数据作为NSData BLOB存储在SQL数据库中,只有在加载到内存中时才会转换回相应的对象类型。对于SQLLite存储,CoreData将任何谓词编译到fetch SQL中,并在数据库中计算结果。因此谓词不能基于可转换数据。)

您有两个选项:1)您可以获取所有对象,然后在内存中对其进行过滤,或2)修改您的模型以将
YearRange
存储为CoreData本机类型(即字符串、数字、日期等)


如果
YearRange
数组的元素表示一个范围的起始年和结束年,那么我推荐后一个选项,它有两个整数属性:
yearRangeStart
yearRangeEnd
。如果
YearRange
可能包含几个离散的年份,那么第一个选项可能是最好的。

看看这个,你会在你的
NSPredicate中使用
IN
属性。看看这个,你会在你的
NSPredicate中使用
IN
属性