創(chuàng)建NSFetchRequest實(shí)例碧囊,然后對其進(jìn)行一些必要的配置,再把它傳遞給contex對象
1.初始化FetchRequest的四中方式
//1根據(jù)實(shí)體名稱創(chuàng)建實(shí)體 并用將其賦值給NSFetchRequest的實(shí)體
let fetchRequest = NSFetchRequest()
let entity = NSEntityDescription.entityForName("Person",inManagedObjectContext: managedObjectContext)!
fetchRequest.entity = entity
//2直接用實(shí)體名稱進(jìn)項(xiàng)初始化
let fetchRequest = NSFetchRequest(entityName: "Person")
//3檢索NSManagedObjectModel中的fetchRequest罗售,可以重新設(shè)置之前使用過的fetchRequest
let fetchRequest = managedObjectModel.fetchRequestTemplateForName("data")
//4與上面的方法類似,substitutionVariab中的值用來刪選request的結(jié)果
let fetchRequest = managedObjectModel.fetchRequestFromTemplateWithName("data",substitutionVariables: ["NAME" :"Test"])
2.在CoreData中添加fetchRequest
注:點(diǎn)擊加號可以添加篩選條件
//上面的第三種初始化NSFetchRequest的方式,coreDataStack為CoreData(二)中創(chuàng)建的stack把沼。
var fetchRequest: NSFetchRequest!
var persons: [Person]!
let model = coreDataStack.context.persistentStoreCoordinator!.managedObjectModel
fetchRequest = model.fetchRequestTemplateForName("FetchRequest")
do {
//結(jié)果保存在persons中
persons = try coreDataStack.context .executeFetchRequest(fetchRequest) as! [Persion]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
3.根據(jù)type返回不同的搜索結(jié)果
//NSManagedObjectResultType返回模型
//NSCountResultType返回滿足要求的結(jié)果的個數(shù)
//NSDictionaryResultType保存為字典類型
//NSManagedObjectIDResultType返回唯一的標(biāo)識
//篩選條件都哭。 NSPredicate支持keypath
lazy var PersonPredicate: NSPredicate = {
var predicate =
NSPredicate(format: "person.name == %@", "hehe")
return predicate
}()
let fetchRequest = NSFetchRequest(entityName: "Person")
//.CountResultType類型 返回滿足要求的結(jié)果的數(shù)目
fetchRequest.resultType = .CountResultType
fetchRequest.predicate = PersonPredicate
do {
let results =try coreDataStack.context
.executeFetchRequest(fetchRequest) as! [NSNumber]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
4.其他的 fetch requests
let fetchRequest = NSFetchRequest(entityName: "Person")
fetchRequest.resultType = .DictionaryResultType
let sumExpression = NSExpressionDescription()
sumExpression.name = "sumAges"
//求和:"sum:"秩伞、最小值:"min:"逞带、最大值:"max:"、平均值:"average:"等
sumExpression.expression = NSExpression(forFunction: "sum:",arguments:[NSExpression(forKeyPath: "age")])
sumExpression.expressionResultType = .Integer32AttributeType
fetchRequest.propertiesToFetch = [sumExpression]
do {
let results = try coreDataStack.context.executeFetchRequest(fetchRequest) as! [NSDictionary]
let resultDict = results.first!
} catch let error as NSError {
print("Could not fetch (error), (error.userInfo)")
}
}
//條件判斷
lazy var agePredicate: NSPredicate = {
var predicate = NSPredicate(format: "age > 0")
return predicate
}()