EMStore 1.6.3

EMStore 1.6.3

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最后发布2024年1月
SPM支持 SPM

Martin Eberl 维护。



EMStore 1.6.3

EMStore

CI Status Version License Platform

示例

要运行示例项目,首先克隆仓库,然后从 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文件。