ios - 更改一个 NSManaged 对象会更改其他对象
问题描述
我在应用商店有一个名为 Hapistats 的应用。它使用云套件。我正在将所有数据从 cloudkit 转换为 Coredata。
我有一个名为log的实体,它与活动有一对多的关系。
问题是当我尝试更新日志的活动时。让我们放置log1是一个日志,它有一个名为activity1的活动。当我尝试将 activity1 添加到已经存在的日志时,log2, log1 将不再有 activity1 并且 log2 将成功地将 activity1 保存到自己。
对于创建的每个更新或新日志,都会发生这种情况。问题是显然只能有一个具有特定活动的日志。
// Edits the log
func editLog(log: Log, rating: Int, activitiesToAddToLog: [Activity]) {
log.rating = Int16(rating)
log.removeFromActivities(log.activities) // Empties the activities from the log
let activitiesOrderedSet = NSOrderedSet(array: activitiesToAddToLog)
log.addToActivities(activitiesOrderedSet) // Adds all the activites to the log
saveToPersistentStore()
}
是唯一调用editLog()的地方
@IBAction func saveActivitiesButtonTapped(_ sender: Any) {
// log is an optional because I use a landing pad for log.
if let log = log {
LogController.shared.editLog(log: log, rating: rating, activities: displayActivities[0])true)
}
}
我希望我的代码在调用 editLog() 时只会将活动添加到日志中,但它会覆盖其他日志的活动。
解决方案
我想到了。这是一个 Xcode 问题。它实际上并不是一对多的,所以我重新添加了它并建立在一个通用设备上,它突然就起作用了。
推荐阅读
- go - 如何对具有共同字段的空接口切片进行排序?
- python - 对 PC 进行套接字编程的两种 Raspi4 不同响应
- d3.js - d3.js 更新 x 域不会移动图形
- r - 根据多个字段和条件将数据标准化为值
- git - 如何通过 Git bash 发送文件内容以更新现有的 Github Gist?
- javascript - 即使鼠标悬停,下拉菜单也会隐藏
- python-sphinx - 如何使用 docutils/sphinx 获取以空格结尾的内联代码?
- c# - System.indexoutofrangeexception:'找不到第 1 列'
- c++ - 在vector.reserve()之后vector.data()不为空吗?
- flutter - Flutter 中的可滚动屏幕