ios - Core Data:当其他属性改变时,Binary Data 属性变为 nil
问题描述
我的应用程序有一个核心数据实体(称为产品),它有两个属性:
- 字符串类型的名称
- 二进制数据类型的图像(选中“允许外部存储”)
现在,由于我正在开发,我在初始viewDidLoad
时创建了一个默认对象,其中包含名称和图像的硬编码值。创建对象后,我可以传递它并在我的应用程序中使用它而不会出现问题。
但是,如果我将 name 属性更新为新的字符串值,然后重新运行应用程序,图像属性将变为nil
(此行为仅在我重新运行应用程序或终止并重新打开它后才会发生)。你知道是什么导致了这种行为吗?
这就是我更改名称值的方式:
DataController.shared.viewContext.perform {
if mike {
product.name = "Mike"
} else {
product.name = "Bob"
}
try? DataController.shared.viewContext.save()
}
我正在使用 DataController 类与持久存储接口:
class DataController {
static let shared = DataController(modelName: "my_model")
let persistentContainer: NSPersistentContainer
var viewContext: NSManagedObjectContext {
return persistentContainer.viewContext
}
private init(modelName: String) {
persistentContainer = NSPersistentContainer(name: modelName)
}
func configureContexts() {
viewContext.automaticallyMergesChangesFromParent = true
viewContext.mergePolicy = NSMergePolicy.mergeByPropertyStoreTrump
}
}
我也在用NSFetchedResultsController
。这就是我在我的viewDidLoad
:
fileprivate func setupFetchedResultsController() {
let fetchRequest:NSFetchRequest<Product> = Product.fetchRequest()
let sortDescriptor = NSSortDescriptor(key: "salesByVolume", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DataController.shared.viewContext, sectionNameKeyPath: nil, cacheName: "products")
fetchedResultsController.delegate = self
do {
try fetchedResultsController.performFetch()
} catch {
fatalError("The request could not be performed: \(error.localizedDescription)")
}
}
谢谢!
解决方案
您可能想尝试以下方法:
DataController.shared.viewContext.perform {
product.setValue("Mike", forKey: "name")
try? DataController.shared.viewContext.save()
}
您需要为键设置值以更新它的值,然后您可以保存它。我希望这有帮助
推荐阅读
- vue.js - 在 Vue.js 下实现 MSAL 2 `loginRedirect`
- ios - 如何在 Swift 中保存实时 Firebase 数据库中的数据?
- nao-robot - Choregraphe:我怎样才能阻止NAO听/让他的眼睛变蓝?
- json - 如何检查JSON是否包含在golang中的数组JSON对象中
- mvvm - 如何在 Blazor 应用程序中使用 MVVM 和 EF Core 仅更新更改的字段?
- jquery - 如何使用 DOM 在 GraphQL 中编写查询
- javascript - 您可以检查 SignalR 集线器是否在线吗?
- javascript - 宽度/高度 html 属性在非 img html 元素中是否重要?
- python - connect() 到 unix:/run/gunicorn.sock 在连接到上游时失败(111:连接被拒绝)-尝试将 django 应用程序上传到 digitalocean
- database - 在时间序列数据库中存储列表列表?