SimpleCoreDataStack 0.1.6

SimpleCoreDataStack 0.1.6

Avi ShevinAvi Shevin维护。



  • 作者:
  • Avi Shevin

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许可协议。有关详细信息,请参阅许可证