【问题标题】:CoreData crashes with a small number of usersCoreData 因少数用户而崩溃
【发布时间】:2026-02-06 04:20:02
【问题描述】:

我开发了一款专注于健康和健身的应用,并使用 Core Data 保存锻炼数据。 在少数用户 (

致命异常:NSInvalidArgumentException,非法尝试在不同上下文中的对象之间建立“X”关系。

当我尝试保存训练程序时出现此错误。 如果我在设备上使用相同的用户帐户登录,则不会发生此错误。

这是我的保存功能:

func saveTraningProgramDB(trainingProgram:RetornoTreino) {
        let db = getContext()
        for ficha in (trainingProgram.programa?.fichas)! {
            let fichasDB = FichasNovoDB(context: db)
            fichasDB.nome = ficha.nome
            ....
            for atividade in ficha.atividades! {
                for atividadePrograma in (trainingProgram.programa?.atividades)! {
                    if atividade.codigoAtividade == String(atividadePrograma.codigoAtividade ?? 0) {
                        let atividadesDB = AtividadesNovoDB(context: db)
                        ...
                        for serie in atividade.series! {
                            let seriesDB = SeriesNovoDB(context: db)
                            ...
                            atividadesDB.addToSeries(seriesDB)
                        }
                        for ajuste in atividade.ajustes! {
                            ...
                            atividadesDB.addToAjustes(ajustesDB)
                        }
                        fichasDB.addToAtividades(atividadesDB)
                    }
                }
            }
            db(fichasDB)
        }
        do {
            try db.save()
        } catch {
            db(error)
        }
    }

有谁知道可能发生了什么,或者我该如何模拟这个问题,因为它只发生在客户端设备上?

感谢所有回复!

注意:对不起,我的英语不是我的母语。

* 已解决 *

问题发生在代码的另一部分以及这部分中的错误堆栈。 问题是客户的手机是 12 小时制而不是 24 小时制的。 日期中断是因为没有正确处理。 谢谢大家。

【问题讨论】:

    标签: swift core-data crash


    【解决方案1】:

    看不到你的上下文是如何相关的,但从我那里可以看到:

    您在名为“db”的上下文中创建 fichasDB 并添加数组 actividadesDB 作为关系,但该数组是在上下文“bancoDeDados”中创建的。这看起来不对。

    除此之外,您还必须使用有关上下文的更多信息来扩展您的代码。

    【讨论】:

    • 对不起,当我将文本放入 traductor 时,我忘记修改代码了。 bancoDeDados 和 db 是相同的上下文。
    • 我最大的问题是,在任何设备上,这种方法都有效。但是在特定的设备上会产生异常(NSInvalidArgumentException)。