swift - NSManagedObject 约束与 Codable
问题描述
我的目标是更新核心数据中存在的原始数据。我正在使用codable
withNSManagedObject
在核心数据中插入原始数据。我成功插入并防止重复条目但无法更新该行。我想在显示错误时更新重新编码。我的意思是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.)}
解决方案
推荐阅读
- javascript - 切换菜单自动关闭ul
- jpa - 具有复合主的 JPA 实体也是同一个表的外键
- docker - 提供有关 API 使用情况的服务器端指标
- android - 如何从 FileProvider URI 获取文件?
- rabbitmq - STOMP 标头中暴露的 RabbitMQ 版本
- javascript - Safari iOS 自动填充“国家”不起作用
- javascript - 为什么我的 HTML 文件只能“看到” Dist 文件夹中的 JavaScript 文件?
- javascript - 如何在 html/js 中的图像后面运行 youtube 视频?
- ruby-on-rails - Rails API 5.1.4 活动存储 - 无法加载“Rails.config.active_storage.service”
- android - 带有 APK 和 Android App Bundle (.aab) 的 Proguard