持久化iOS 开发 iOS学习开发

CoreData(三)---Fetching

2016-01-11  本文已影响137人  xiaocheche

创建NSFetchRequest实例,然后对其进行一些必要的配置,再把它传递给contex对象

1.初始化FetchRequest的四中方式

//1根据实体名称创建实体 并用将其赋值给NSFetchRequest的实体
let fetchRequest = NSFetchRequest()
let entity =  NSEntityDescription.entityForName("Person",inManagedObjectContext: managedObjectContext)!
fetchRequest.entity = entity
//2直接用实体名称进项初始化
let fetchRequest = NSFetchRequest(entityName: "Person")
//3检索NSManagedObjectModel中的fetchRequest,可以重新设置之前使用过的fetchRequest
let fetchRequest = managedObjectModel.fetchRequestTemplateForName("data")

//4与上面的方法类似,substitutionVariab中的值用来删选request的结果
let fetchRequest = managedObjectModel.fetchRequestFromTemplateWithName("data",substitutionVariables: ["NAME" :"Test"])

2.在CoreData中添加fetchRequest


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

注:点击加号可以添加筛选条件

//上面的第三种初始化NSFetchRequest的方式,coreDataStack为CoreData(二)中创建的stack。
var fetchRequest: NSFetchRequest!
 var persons: [Person]!
let model = coreDataStack.context.persistentStoreCoordinator!.managedObjectModel
fetchRequest = model.fetchRequestTemplateForName("FetchRequest")
do { 
       //结果保存在persons中
       persons = try coreDataStack.context .executeFetchRequest(fetchRequest) as! [Persion]
        } catch let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
        }

3.根据type返回不同的搜索结果

//NSManagedObjectResultType返回模型
//NSCountResultType返回满足要求的结果的个数
//NSDictionaryResultType保存为字典类型
//NSManagedObjectIDResultType返回唯一的标识


//筛选条件。 NSPredicate支持keypath
lazy var PersonPredicate: NSPredicate = {
            var predicate =
            NSPredicate(format: "person.name == %@", "hehe")
            return predicate
        }()

let fetchRequest = NSFetchRequest(entityName: "Person")
//.CountResultType类型 返回满足要求的结果的数目
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
        }()
上一篇 下一篇

猜你喜欢

热点阅读