CoreData(三)---Fetching

創(chuàng)建NSFetchRequest實例,然后對其進行一些必要的配置,再把它傳遞給contex對象

1.初始化FetchRequest的四中方式

//1根據(jù)實體名稱創(chuàng)建實體 并用將其賦值給NSFetchRequest的實體
let fetchRequest = NSFetchRequest()
let entity =  NSEntityDescription.entityForName("Person",inManagedObjectContext: managedObjectContext)!
fetchRequest.entity = entity
//2直接用實體名稱進項初始化
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


屏幕快照 2016-01-11 下午3.50.05.png

注:點擊加號可以添加篩選條件

//上面的第三種初始化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返回唯一的標識


//篩選條件。 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
        }()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容