func clearConversationList() {
objc_sync_enter(self)
defer { objc_sync_exit(self) }
let fetchRequest: NSFetchRequest<PersistentConversationDataItem> = PersistentConversationDataItem.fetchRequest()
let cachedResults = try! coreDataContext.fetch(fetchRequest)
cachedResults.forEach { coreDataContext.delete($0) }
save()
}
class Manager {
let coreDataContext: NSManagedObjectContext
init(withContext context: NSManagedObjectContext = CoreDataManager.shared.viewContext) {
coreDataContext = context
}
func save() {
DispatchQueue.main.async {
if self.coreDataContext.hasChanges {
do {
try self.coreDataContext.save()
} catch {
if let error = error as NSError? {
print("U \(error), \(error.userInfo)")
}
}
}
}
}
}
崩溃消息:***由于未捕获的异常“NSGenericException”而终止应用程序,原因:“***集合
在枚举时发生了变化。”
<__NSCFSet: 0x600000e76880>
您正在迭代coreDataContext
。如果
cachedResults
由受这些删除影响的集合支持,这可能会导致问题。
要解决此问题,您可以尝试几种方法:使用集合的副本进行迭代
let resultsCopy = Array(cachedResults)
resultsCopy.forEach { coreDataContext.delete($0) }
避免使用 forEach 进行变异操作
for item in cachedResults {
coreDataContext.delete(item)
}