CoreStore
是Swift
的 缓存框架,文档说明也比较全面,开发之前先阅读好文档,还有专门demo进行参考,github的地址在这里
CoreStore
它强制执行安全方便的核心数据,我们经常在开发数据相关应用程序时,碰到了数据存储的问题,CoreStore
根据这些问题总结了一套相应的方法,同时也是业界鼓励的最佳做法。
初始化 CoreStore 的最简单方法是将默认存储添加到默认堆栈:
try CoreStoreDefaults.dataStack.addStorageAndWait()
这个单线执行以下操作:
CoreStoreDefaults.dataStack
使用默认值触发延迟初始化DataStack
NSPersistentStoreCoordinator
、根保存NSManagedObjectContext
和只读主NSManagedObjectContext
SQLiteStore
在“Application Support/”目录(或tvOS 上的“Caches/”目录)中添加一个文件名为“[App bundle name].sqlite”的文件NSPersistentStore
在成功或NSError
失败时创建并返回实例对于大多数情况,这种配置就足够了。但是对于更多的核心设置,请参阅这个广泛的示例:
let dataStack = DataStack(
xcodeModelName: "MyModel", // loads from the "MyModel.xcdatamodeld" file
migrationChain: ["MyStore", "MyStoreV2", "MyStoreV3"] // model versions for progressive migrations
)
let migrationProgress = dataStack.addStorage(
SQLiteStore(
fileURL: sqliteFileURL, // set the target file URL for the sqlite file
configuration: "Config2", // use entities from the "Config2" configuration in the .xcdatamodeld file
localStorageOptions: .recreateStoreOnModelMismatch // if migration paths cannot be resolved, recreate the sqlite file
),
completion: { (result) -> Void in
switch result {
case .success(let storage):
print("Successfully added sqlite store: \(storage)")
case .failure(let error):
print("Failed adding sqlite store with error: \(error)")
}
}
)
CoreStoreDefaults.dataStack = dataStack // pass the dataStack to CoreStore for easier access later on
💡如果您从未听说过“配置”,您会在.xcdatamodeld
文件 中找到它们:
在我们上面的示例代码中,请注意您不需要执行该CoreStoreDefaults.dataStack = dataStack
行。您也可以保留对以下DataStack
类似内容的引用并直接调用其所有实例方法:
class MyViewController: UIViewController {
let dataStack = DataStack(xcodeModelName: "MyModel") // keep reference to the stack
override func viewDidLoad() {
super.viewDidLoad()
do {
try self.dataStack.addStorageAndWait(SQLiteStore.self)
}
catch { // ...
}
}
func methodToBeCalledLaterOn() {
let objects = self.dataStack.fetchAll(From<MyEntity>())
print(objects)
}
}
💡默认情况下,
CoreStore
将从.xcdatamodeldNSManagedObject
文件初始化s ,但您可以使用s 和完全从源代码创建模型。要使用此功能,请参阅Type-safe s
。CoreStoreObjectCoreStoreSchemaCoreStoreObject
请注意,在我们前面的示例中,addStorageAndWait
(_:)两者addStorage(_:completion:)
都接受InMemoryStore
或SQLiteStore
。这些实现了StorageInterface
协议。
最基本的StorageInterface
具体类型是InMemoryStore
,它只是将对象存储在内存中。由于InMemoryStores
总是以新的空数据开始,因此它们不需要任何迁移信息。
try dataStack.addStorageAndWait(
InMemoryStore(
configuration: "Config2" // optional. Use entities from the "Config2" configuration in the .xcdatamodeld file
)
)
异步变体:
try dataStack.addStorage(
InMemoryStore(
configuration: "Config2
),
completion: { storage in
// ...
}
)
(此方法的反应式编程变体在“DataStack组合发布者”部分中有详细说明)