更改一个NSManaged对象将更改其他对象

时间:2019-11-01 19:41:16

标签: ios core-data

我在应用商店上有一个名为Hapistats的应用。它使用cloudkit。我正在将所有数据从cloudkit转换为Coredata。

我有一个名为 log 的实体,它与活动有一对多的关系。

问题是当我尝试更新日志的活动时。让我们放置 log1 是具有名为 activity1 的活动的日志。当我尝试将活动1添加到已经存在的日志 log2 中时,日志1将不再具有活动1,日志2将成功将活动1保存到其自身。

每次更新或创建新日志时都会发生这种情况。问题在于,显然只有一个具有特定活动的日志。

// 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()时将活动添加到日志中,但是它将覆盖其他日志的活动。

1 个答案:

答案 0 :(得分:0)

我知道了。这是一个Xcode问题。实际上,它并不是一对一的,所以我重新添加了它,并在通用设备上构建,然后突然起作用。