CoreDataStack
CoreDataStack提供了一站式Core Data堆栈。它旨在使Core Data既安全又易于使用。对于需要高性能、多写者的应用程序,此项目不适合您。
CoreDataStack为主线程提供只读的NSManagedObjectContext
。编写上下文根据需要提供,工作在后台队列上序列化。
初始化
public init(modelName: String, storeType: String) throws
使用给定的模型名称和存储类型初始化堆栈。
convenience public init(modelName: String) throws
使用给定的模型名称和NSSQLiteStoreType
存储类型初始化堆栈。
管理对象的使用
修改对象
主要工作原理是
public func perform(_ block: @escaping CoreDataManagerUpdateBlock, completion: (() -> ())? = nil)
该方法将块提交到后台上下文中。操作完成后,在相同的线程上调用完成。
CoreDataManagerUpdateBlock
接收一个上下文和一个布尔值shouldSave
,该布尔值可以被块修改。当设置为false
时,所有更改将被丢弃。
查询对象
public func query(_ block: @escaping CoreDataManagerQueryBlock)
此方法将提交一个接收只读上下文的块。该块在后台队列中运行,用于处理需要从核心数据获取信息但没有修改需求的工作。该块与perform()
块并行运行。
public func viewQuery(_ block: CoreDataManagerQueryBlock)
此方法在viewContext
上提交块,应仅从主线程调用。
上下文
用于修改核心数据的上下文由perform()
方法提供。这些上下文在块完成后、完成之前被摧毁。
用于后台查询的上下文由query()
方法提供。这些上下文在块完成后被摧毁。如果上下文有更改,将抛出fatalError()
。
有一个特殊的持久上下文,称为viewContext
,用于在主线程上查询核心数据。当它们保存时,由perform()
上下文所做的更改会合并到这个上下文中。
谓词
对NSPredicate
类的扩展提供了几个方法和运算符,以简化谓词的创建。
public static func predicate(for conditions: [String: Any]) -> NSPredicate
此方法接受一个键值对的字典。键是正在查询的核心数据实体的属性。值是满足查询的条件。条件通过AND
谓词连接在一起。
示例
// someKey == 5
predicate(for: ["someKey": 5])
// someKey BETWEEN 5 and 10
predicate(for: ["someKey": 5...10])
// someKey IN [1, 3, 5]
predicate(for: ["someKey", [1, 3, 5]])
复合谓词
也可以使用以下方法创建复合语句。
public func or(_ conditions: [String: Any]) -> NSPredicate
public func or(_ predicate: NSPredicate) -> NSPredicate
public func and(_ conditions: [String: Any]) -> NSPredicate
public func and(_ predicate: NSPredicate) -> NSPredicate
谓词也可以使用以下运算符组合。
// AND
public static func && (left: NSPredicate, right: NSPredicate) -> NSPredicate
// OR
public static func || (left: NSPredicate, right: NSPredicate) -> NSPredicate
许可证
本软件采用MIT许可协议。有关详细信息,请参阅许可证。