Я испытываю такую фатальную ошибку: (иногда это происходит не при каждом запуске приложения)
curl -X GET "http://image.tmdb.org/t/p/w185/fnjr5mJYERwICCB0Zhbkr8kucWi.jpg?" -i -v Успех (1 мс): Статус200 2019-11-09 19: 51: 13.502: изображение плаката -> подписано 2019-11-09 19: 51: 13.502: изображение плаката -> Событие следующее (ноль) Фатальная ошибка: неразрешенная ошибка Ошибка Домен = NSCocoaErrorDomain Code = 133020 "Не удалось объединить изменения. "UserInfo = {ликтList = (" NSMergeConflict (0x600001e06080) для NSManagedObject (0x6000028b2df0) с идентификатором объекта '0x8434ec0c3b730519' с oldVersion = 52 и newVersion = 52 \ old ners 100 * {61 = old id0 * 0 = {; old id0 * 0 = {; old id0 * 0 = {; old id0 * 0 = {; old id0 * 0 = {; старая идентификационная строка = 0;\ n Overview = \ "В погоне за идеальным Рождеством известные персонажи в сопровождении новых лиц сталкиваются с крошечными чудесами! Приключения, с которыми они сталкиваются, помогают им осознать, что самые важные вещи в жизни - надежда, принятие и семья - этов пределах их досягаемости и настоящая любовь - лучший рождественский подарок! \ "; \ n posterPath = \" / 7t64lJYNE9CHB820UUIrthHwruf.jpg \ "; \ n releaseaseDate = \ "2015-11-13 \"; \ n title = \ "Письма Санте 2 \"; \ n} и новая строка базы данных = {\ n id = 370291; \ n Overview = \ "В их стремлении кпрекрасное Рождество известные персонажи в сопровождении некоторых новых лиц переживают крошечные чудеса! Приключения, с которыми они сталкиваются, помогают им понять, что самые важные вещи в жизни - надежда, принятие и семья - в пределах их досягаемости, и что настоящая любовь - лучший рождественский подарок! \ "; \ N posterPath = \" / 7t64lJYNE9CHB820UUIrthHwruf.jpg \"; \ n releaseDate = \" 2015-11-13 \ "; \ n title = \" Письма Санте 2 \ "; \ n}"), NSExceptionOmitCallstacks = true}, ["threatList": <__ NSArrayM 0x60000056b1b0> (NSMergeConflict (0x600001e06080) для NSManagedObject (0x6000028b2df0) с objectID '0x8434ec0c3b730519' с oldVersion = 52 и newVersion = 52 и старой кэшированной строкой = {id = 370291; обзор = "В их стремлении к новым хорошо знакомым некоторые символы - в их стремлении к прекрасному Рождеству - новые лица сопровождались новыми известными персонажами - преследовавшими себя в поисках идеального Рождестваслучаются крошечные чудеса! Приключения, с которыми они сталкиваются, помогают им осознать, что самые важные вещи в жизни - надежда, принятие и семья - находятся в пределах их досягаемости и что настоящая любовь - лучший рождественский подарок! "; posterPath =" / 7t64lJYNE9CHB820UUIrthHwruf. jpg "; releaseDate =" 2015-11-13 "; title = "Письма Санте 2";} и новая строка базы данных = {id = 370291;Overview = "В погоне за идеальным Рождеством известные персонажи в сопровождении новых лиц сталкиваются с крошечными чудесами! Приключения, с которыми они сталкиваются, помогают им осознать, что самые важные вещи в жизни - надежда, принятие и семья - находятся в пределах их досягаемостии эта настоящая любовь - лучший рождественский подарок! ";posterPath = "/7t64lJYNE9CHB820UUIrthHwruf.jpg";releaseDate = "2015-11-13";title = "Письма Санте 2";}), "NSExceptionOmitCallstacks": 1]: файл / Users / michzio / Click5Interactive / Samples / MVVM в Swift / MVVM / MVVM / Data / CoreData / Interfaces / ICoreDataStorage.swift, строка 104 2019-11-09 19: 51: 13.503: запрос изображения плаката -> подписано 2019-11-09 19: 51: 13.503: загрузить изображение плаката -> подписано 2019-11-09 19: 51: 13.503: загрузить изображение плаката -> Событие следующее (ноль) 2019-11-0919: 51: 13.503938 + 0100 MVVM [21984: 2813376] Неустранимая ошибка: неразрешенная ошибка Ошибка Domain = NSCocoaErrorDomain Code = 133020 «Не удалось объединить изменения». UserInfo = {ликтList = ("NSMergeConflict (0x600001e06080) для NSManagedObject (0x6000028b2df0) с objectID '0x8434ec0c3b730519' с oldVersion = 52 и newVersion = 52 и старой кэшированной строкой = {\ n *01 = id = {\ n * 1001 = id;В погоне за идеальным Рождеством известные персонажи, сопровождаемые новыми лицами, испытывают крошечные чудеса! Приключения, с которыми они сталкиваются, помогают им осознать, что самое важное в жизни - надежда, принятие исемья - в пределах их досягаемости, и настоящая любовь - лучший рождественский подарок! \ "; \ n posterPath = \" / 7t64lJYNE9CHB820UUIrthHwruf.jpg \ "; \ n releaseDate = \" 2015-11-13 \ "; \ n title =\ "Письма Деду Морозу 2 \"; \ n} и новая строка базы данных = {\ n id = 370291; \ n Overview = \ "В погоне за идеальным Рождеством известные персонажи, сопровождаемые некоторыми новыми лицами, испытывают крошечные чудеса! Приключения, с которыми они сталкиваются, помогают им понять, что самые важные вещи в жизни - надежда, принятие и семья - в пределах их досягаемости, и что настоящая любовь - лучший рождественский подарок! \ "; \ N posterPath = \" / 7t64lJYNE9CHB820UUIrthHwruf.jpg \"; \ n releaseDate = \" 2015-11-13 \ "; \ n title = \" Письма Санте 2 \ "; \ n}"), NSExceptionOmitCallstacks = true}, ["threatList": <__ NSArrayM 0x60000056b1b0> (NSMergeConflict (0x600001e06080) для NSManagedObject (0x6000028b2df0) с objectID '0x8434ec0c3b730519' с oldVersion = 52 и newVersion = 52 и старой кэшированной строкой = {id = 370291; обзор = "В их стремлении к новым хорошо знакомым некоторые символы - в их стремлении к прекрасному Рождеству - новые лица сопровождались новыми известными персонажами - преследовавшими себя в поисках идеального Рождестваслучаются крошечные чудеса! Приключения, с которыми они сталкиваются, помогают им осознать, что самые важные вещи в жизни - надежда, принятие и семья - находятся в пределах их досягаемости и что настоящая любовь - лучший рождественский подарок! "; posterPath =" / 7t64lJYNE9CHB820UUIrthHwruf. jpg "; releaseDate =" 2015-11-13 "; title = "Письма Санте 2";} и новая строка базы данных = {id = 370291;Overview = "В погоне за идеальным Рождеством известные персонажи в сопровождении новых лиц сталкиваются с крошечными чудесами! Приключения, с которыми они сталкиваются, помогают им осознать, что самые важные вещи в жизни - надежда, принятие и семья - находятся в пределах их досягаемостии эта настоящая любовь - лучший рождественский подарок! ";posterPath = "/7t64lJYNE9CHB820UUIrthHwruf.jpg";releaseDate = "2015-11-13";title = "Письма Санте 2";}), "NSExceptionOmitCallstacks": 1]: файл / Users / michzio / Click5Interactive / Samples / MVVM в Swift / MVVM / MVVM / Данные / CoreData / Интерфейсы / ICoreDataStorage.swift, строка 104 curl -X GET "http://image.tmdb.org/t/p/w185/okTdaEgs0qdwHvqzAYOuHkmdwyI.jpg?" -i -v
Функция здесь insertReplacing () где источник этой ошибки:
func insertReplacing(_ e: Entity) -> Observable<Entity> {
return Observable.create { observer -> Disposable in
self.storage.persistentContainer.performBackgroundTask { [weak self] context in
guard let self = self else { observer.onCompleted(); return }
let request = ManagedObject.fetchRequest() as! NSFetchRequest<ManagedObject>
request.predicate = NSPredicate(format: "id = %@", e._identifier)
do {
let result = try context.fetch(request)
if result.count == 0 {
// CREATE
var object = ManagedObject(context: context)
self.encode(entity: e, into: &object)
self.storage.saveContext(context)
observer.onNext(self.decode(object: object))
observer.onCompleted()
} else if result.count > 1 {
observer.onError(CoreDataError.inconsistentState)
} else {
// REPLACE
context.delete(result.last!)
var object = ManagedObject(context: context)
self.encode(entity: e, into: &object)
self.storage.saveContext(context)
observer.onNext(self.decode(object: object))
observer.onCompleted()
}
} catch {
observer.onError(CoreDataError.readError(error))
}
}
return Disposables.create()
}
}
А вот функция saveContext ()
func saveContext(_ context: NSManagedObjectContext) {
guard context != mainContext else {
saveContext()
return
}
context.performAndWait {
do {
try context.save()
} catch let error as NSError {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
self.saveContext(self.mainContext)
}
}
и мой CoreDataStorage
class CoreDataStorage : ICoreDataStorage {
static let shared = CoreDataStorage()
private init() {}
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
/*
The persistent container for the application. This implementation
creates and returns a container, having loaded the store for the
application to it. This property is optional since there are legitimate
error conditions that could cause the creation of the store to fail.
*/
let container = NSPersistentContainer(name: "MVVM")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
/*
Typical reasons for an error here include:
* The parent directory does not exist, cannot be created, or disallows writing.
* The persistent store is not accessible, due to permissions or data protection when the device is locked.
* The device is out of space.
* The store could not be migrated to the current model version.
Check the error message to determine what the actual problem was.
*/
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
container.viewContext.undoManager = nil
container.viewContext.shouldDeleteInaccessibleFaults = true
container.viewContext.automaticallyMergesChangesFromParent = true
return container
}()
}
и приходят свойства, определенные на ICoreDataStorage
public extension ICoreDataStorage {
var isInMemoryStore : Bool { return false }
var mainContext : NSManagedObjectContext {
return self.persistentContainer.viewContext
}
var taskContext : NSManagedObjectContext {
let context = self.persistentContainer.newBackgroundContext()
context.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
context.undoManager = nil
return context
}