我的核心数据数据库中有一个名为 AudioFile 的实体。它具有名称、艺术家、文件扩展名等属性,这些属性都是字符串。 只要名称和文件扩展名不同,音频文件就是唯一的。
我还有一个名为“UpNextItem”的结构,它与核心数据中的“AudioFile”实体具有相同的属性,除了有一个 UUID 类型的附加 id 属性,因为用户可以添加同一音频文件的多个实例。
如何将非常大的下一个项目数组存储到磁盘?使用 JSONEncoder 也非常慢,CPU 使用率几乎达到 140%,我的应用程序挂起近 2-3 秒。
或者有更好的方法来存储这个吗?因为“AudioFile”和“UpNextItem”几乎相同?
我期望用户在数组中拥有 10000 或更多的下一个项目,因此实际上需要在数组中存储大量数据。
func saveUpNextItems() {
if let items = try? JSONEncoder().encode(upNextManager.upNextItems) {
do {
try items.write(to: FileManager.upNextQueueURL.appendingPathComponent("upNextItems"))
} catch {
print(error)
}
}
}
您将创建一个名为 UpNextItem 的新核心数据实体,该实体将具有标识符和与音频文件的(非删除)Many:1 关系。然后,您将拥有一个与 UpNextItem 具有有序 1:Many 关系(具有级联删除)的播放列表实体。