swift - 更新 Core Data 值,SwiftUI
问题描述
我有一个对象列表:
@FetchRequest(entity: ObjectDetail.entity(), sortDescriptors: []) var myObject: FetchedResults<ObjectDetail>
我的 ObjectDetail 是我的 .xcdatamodel 中的一个实体,其结构如下:
listOfObject: Transformable (List of custom object)
objectId: UUID
objectName: String
objectDescription: String
对象列表:
public class ListOfObject: NSObject, NSCoding, ObservableObject {
...
}
我正在尝试更新我的 listOfObject 中的一个元素。
到目前为止,我尝试了以下 3 种方法:
第一种方法:
mangedObjectContext.performAndWait { self.elementFromListOfObject.objectWillChange.send() elementFromListOfObject.weight = 0 try? mangedObjectContext.save() }
第二种方法:
if let selectedObject = self. myObject.first(where: {$0.objectName == self.currentSelectedObjectName}) { if let selectedElementFromListOfObject = selectedObject.myList?.myListOfObject.first(where: {$0 == self.currentSelectedObject }) { selectedElementFromListOfObject.weight = 0 self.excercise.objectWillChange.send() saveContext() } }
第三种方法
do { let request = NSBatchUpdateRequest(entity: ObjectDetail.entity()) request.resultType = .updatedObjectIDsResultType request.propertiesToUpdate = ["weight": 0] let result = try mangedObjectContext.execute(request) as? NSBatchUpdateResult let objectIDArray = result?.result as? [NSManagedObjectID] let changes = [NSUpdatedObjectsKey: objectIDArray] NSManagedObjectContext.mergeChanges(fromRemoteContextSave: changes as [AnyHashable : Any], into: [mangedObjectContext]) } catch { let nsError = error as NSError fatalError("Unresolved error \(nsError), \(nsError.userInfo)") }
第三个崩溃了,因为它说 request.propertiesToUpdate 为空,其他方法保存该值,但是当我重新启动应用程序时,它是默认值。
在 SwiftUI 中更新 Core Data 中的值的最佳方法是什么?
解决方案
推荐阅读
- angular - angular-google-charts:解析 x 属性的意外值 NaN
- firebase - Bootstrap Vue + Nuxt JS modal problem inside v-for
- python-3.x - AttributeError: module 'pandas' has no attribute 'read_csv' in python 3.6
- excel - VBA Mismatch - Range
- c# - 删除mongdb中数组列表的一个对象
- r - non-numeric argument to mathematical function error while rounding off particular column in R dataframe
- c# - 表单内的 asp-action 不会进入控制器
- python - Mac OS X 上 pipenv 内带有 matplotlib 的空白图
- docker - 无法在 Dockerfile 中运行 sysctl 命令
- sendgrid-api-v3 - 如何使用 SendGrid v3 API 更改收件人的电子邮件地址?