首页 > 解决方案 > NSManagedObject 约束与 Codable

问题描述

我的目标是更新核心数据中存在的原始数据。我正在使用codablewithNSManagedObject在核心数据中插入原始数据。我成功插入并防止重复条目但无法更新该行。我想在显示错误时更新重新编码。我的意思是try-catch阻止。

Predicate我可以通过使用from获取特定记录来做另一种方式,CoreData但这种方式没有使用的意义CoreData constraints。我可以在每次插入之前检查,但我不想这样做。

检查下面的代码,当它在 catch 块中插入重复的重新编码时引发错误时,我想做一些事情。

 func parse(_ jsonData:Data?) -> APIResult {
        do {
            guard let data = jsonData else {throw JsonError.NoData}
            let decoder = JSONDecoder()
            let context = AppDelegate.delegate().persistentContainer.viewContext
            if let codingUserInfoKeyManagedObjectContext = CodingUserInfoKey.context {
                decoder.userInfo[codingUserInfoKeyManagedObjectContext] = context
            }
            _ =  try decoder.decode(User.self, from: data)
            try context.save()
            return .success("")
        }catch let errror as JsonError {
            return .fail(errror.rawValue)
        }catch let error {
            return .fail(error.localizedDescription)
        }
    }

我将email属性用作constraints.

extension User {
    @nonobjc public class func fetchRequest() -> NSFetchRequest<User> {
        return NSFetchRequest<User>(entityName: "User")
    }

    @NSManaged public var firstName: String?
    @NSManaged public var lastName: String?
    @NSManaged public var dob: String?
    @NSManaged public var email: String?

}

控制台错误:

Error Domain=NSCocoaErrorDomain Code=1610 "The operation couldn’t be completed. (Cocoa error 1610.)" UserInfo={NSValidationErrorObject=<NSManagedObject: 0x7fef63611dd0> (entity: User; id: 0x7fef63613eb0 <x-coredata:///User/t8C45E95D-D8C3-4900-82FA-BC313D53D5882> ; data: {
    email = "me@icloud.com";
    firstName = chandan;
    lastName = Kumar;
     dob = "20/01/1994"
}), NSValidationErrorValue=140, NSValidationErrorKey=email, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1610.)}

标签: swiftcore-datacodable

解决方案


推荐阅读