From 83b97621222668ca3bfdf75964fac4d2b4d2a5bf Mon Sep 17 00:00:00 2001 From: Bob Sun Date: Thu, 16 Feb 2017 13:24:41 +0800 Subject: [PATCH] solve core data conflict caused by updating password entity image --- .../PasswordDetailTableViewController.swift | 4 +++- pass/Models/PasswordStore.swift | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pass/Controllers/PasswordDetailTableViewController.swift b/pass/Controllers/PasswordDetailTableViewController.swift index 1f001e7..49659b0 100644 --- a/pass/Controllers/PasswordDetailTableViewController.swift +++ b/pass/Controllers/PasswordDetailTableViewController.swift @@ -178,7 +178,9 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni self?.passwordImage = image self?.tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic) let imageData = UIImageJPEGRepresentation(image, 1) - self?.passwordEntity?.setValue(imageData, forKey: "image") + if let entity = self?.passwordEntity { + PasswordStore.shared.updateImage(passwordEntity: entity, image: imageData) + } case .failure(let error): print(error) } diff --git a/pass/Models/PasswordStore.swift b/pass/Models/PasswordStore.swift index 023612f..3522320 100644 --- a/pass/Models/PasswordStore.swift +++ b/pass/Models/PasswordStore.swift @@ -364,6 +364,29 @@ class PasswordStore { } } + func updateImage(passwordEntity: PasswordEntity, image: Data?) { + if image == nil { + return + } + let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) + privateMOC.parent = context + privateMOC.perform { + passwordEntity.image = NSData(data: image!) + do { + try privateMOC.save() + self.context.performAndWait { + do { + try self.context.save() + } catch { + fatalError("Failure to save context: \(error)") + } + } + } catch { + fatalError("Failure to save context: \(error)") + } + } + } + func erase() { Utils.removeFileIfExists(at: storeURL) Utils.removeFileIfExists(at: tempStoreURL)