EMStore
示例
要运行示例项目,首先克隆仓库,然后从 Example 目录中运行 pod install
。
要求
Xcode 9.4.1 Swift 5.0
1.6.1 中的新功能
- 修复了未添加到 pod 的文件
1.6.0 新特性
- 添加了云工具包支持
- 现在手动执行提交,您可以控制内容何时提交
1.5.0 新特性
- 更新 Swift 5
- 修复模型之间的关系未按预期工作
1.4.0 新特性
添加
store.rollback()
1.3.2 新特性
修复与 iOS9 及以下版本的 store coordinator 问题
1.3.1 新特性
回滚了抛出异常的代码块,但提供了一个默认的 SQL 文件路径 URL。如果您不提供任何内容
1.3.0 新特性
如果您不输入 SQL 文件,它将为您自动提供。这是实际实现方式
.userDomainMask, true).first else {
throw SqlFile.filePathNotFound
}
return URL(fileURLWithPath: path).appendingPathComponent("content.sqlite")
最终,如果不能创建它,则抛出错误。
1.2.0版本新增功能
现在您可以观察值何时被插入/添加、删除、移动或更新。您只需将存储协议中的行从 var model: Observable<[Entry]>? { get }
更改为 var entities: ManagedObjectObservable<[Entry]>? { get }
,或者直接使用参数entities
访问存储的实体。当然,您仍然可以使用 onValueChanged { allEntities in ... }
来观察所有实体。
以下是一个示例。
override func viewDidLoad() {
super.viewDidLoad()
//..
store.entries?.onItemAdded { entity, indexPath in
//... entity has been added
}
store.entries?.onItemRemoved { entity, indexPath in
//... entity has been removed
}
store.entries?.onItemUpdated { entity, indexPath in
//... entity has been updated
}
store.entries?.onItemMoved { entity, from, to in
//... entity has been moved
}
}
安装
EMStore通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中
pod 'EMStore'
定义一个存储并在下面的方式实现。这里的“模型”是您的xcdatamodeld文件名。如果不相同,您的应用最终会崩溃。因此请注意。
protocol EntryStore {
var model: Observable<[Entry]>? { get }
var new: Entry? { get }
func add(model: Entry)
func remove(model: Entry)
}
final class DefaultEntryStore: ManagedObjectStore<Entry>, EntryStore {
init() {
super.init(storage: SqliteStorage<Entry>("Model"),
predicate: nil,
sortDescriptors: [NSSortDescriptor(key: "date", ascending: true)])
}
}
现在像下面这样设置存储
let store = DefaultEntryStore()
访问存储内容相当简单
let fetchedContent = store.entries?.value
向存储添加新内容同样非常简单
guard let entry = store.new else {
return
}
entry.date = NSDate()
store.add(model: entry)
最后但同样重要的是,我们希望在添加或删除内容时收到通知。因此我们使用可观察的值属性。使用闭包,当有变化时您可以收到通知。未来我们可能会提供更多的闭包,以便在一项条目被添加时收到通知。
override func viewDidLoad() {
super.viewDidLoad()
//..
store.entries?.onValueChanged { _ in
//... update the table- or collectionview .. or what ever you want to do with the content
}
}
期待收到一些反馈 :)
作者
Martin Eberl, [email protected]
许可证
EMStore在MIT许可证下可用。更多信息请参阅LICENSE文件。