核心数据 NSPredicate For 属性 of type Array
Core Data NSPredicate For Property of type Array
我有这个核心数据对象
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 格式是什么?
由于 CoreData 本身不支持数组属性,我假设 YearRange
被定义为 Transformable。如果是这种情况,并且假设您使用的是 SQLLite 商店,则不能使用基于 YearRange
的谓词来过滤提取请求。 (可转换对象作为 NSData blob 存储在 SQL 数据库中,只有在加载到内存中时才会转换回适当的对象类型。对于 SQLLite 存储,CoreData 将任何谓词编译到获取 SQL 并在数据库本身中评估结果。因此谓词不能基于 Transformables。)
您有两个选择:1) 您可以获取所有对象,然后在内存中过滤它们,或者 2) 修改您的模型以将 YearRange
存储为 CoreData 本机类型(即字符串、数字) 、日期等)。
如果YearRange
数组的元素代表一个范围的开始和结束年份,那么我推荐后一种选择,有两个整数属性:yearRangeStart
和yearRangeEnd
。如果 YearRange
可能包含几个不连续的年份,那么第一个选项可能是最好的。
我有这个核心数据对象
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 格式是什么?
由于 CoreData 本身不支持数组属性,我假设 YearRange
被定义为 Transformable。如果是这种情况,并且假设您使用的是 SQLLite 商店,则不能使用基于 YearRange
的谓词来过滤提取请求。 (可转换对象作为 NSData blob 存储在 SQL 数据库中,只有在加载到内存中时才会转换回适当的对象类型。对于 SQLLite 存储,CoreData 将任何谓词编译到获取 SQL 并在数据库本身中评估结果。因此谓词不能基于 Transformables。)
您有两个选择:1) 您可以获取所有对象,然后在内存中过滤它们,或者 2) 修改您的模型以将 YearRange
存储为 CoreData 本机类型(即字符串、数字) 、日期等)。
如果YearRange
数组的元素代表一个范围的开始和结束年份,那么我推荐后一种选择,有两个整数属性:yearRangeStart
和yearRangeEnd
。如果 YearRange
可能包含几个不连续的年份,那么第一个选项可能是最好的。