首页 > 解决方案 > 更改一个 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() 时只会将活动添加到日志中,但它会覆盖其他日志的活动。

标签: ioscore-data

解决方案


我想到了。这是一个 Xcode 问题。它实际上并不是一对多的,所以我重新添加了它并建立在一个通用设备上,它突然就起作用了。


推荐阅读