【问题标题】:EXC_BAD_ACCESS after storing an object into List in RealmSwift将对象存储到 RealmSwift 中的 List 后的 EXC_BAD_ACCESS
【发布时间】:2017-05-14 17:33:06
【问题描述】:

我将数据存储到 Realm 中,其中我在游戏对象中有一个目标列表:

Goal.swift

class Goal : Object {
    dynamic var scoreTime = Date()
    dynamic var scoreBy:Player?
    dynamic var scoreForTeam:GameTeam?
    dynamic var homeScoreAfter:Int = 0
    dynamic var awayScoreAfter:Int = 0
    let passers = List<Player>()
}

Game.swift

class Game : Object {
    dynamic var startDate:Date? = nil
    dynamic var endDate:Date? = nil
    dynamic var homeTeam:GameTeam?
    dynamic var awayTeam:GameTeam?
    let goals = List<Goal>()
}

我正在将一个目标添加到游戏的目标属性中,但目标列表在保存后似乎无效。代码如下:

let toCreate = Game()

toCreate.homeTeam = GameTeam()
toCreate.awayTeam = GameTeam()

toCreate.startDate = Date()

let goal = Goal(scoreBy: allPlayers[0].player, scoreForTeam: toCreate.homeTeam!, passedBy: [], scoreTime: Date(), homeScoreAfter: 1, awayScoreAfter: 0)
toCreate.goals.append(goal)

let realm = try! Realm()

try! realm.write {
    realm.add(toCreate)
}

但是在realm.write 通话后,我遇到了这个错误:

(lldb) po toCreate.goals

expression produced error: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x8).
The process has been returned to the state before expression evaluation.

而且我不能再使用目标列表了。在 realm.write 完成之前它打印得很好。我在这里遗漏了什么微不足道的东西......?对象的其他部分表现得很好。

编辑:不知何故,问题在于属性Goal.passers- 从对象中删除它可以解决问题。这是否与在对象层次结构中有很多对播放器的引用有关?看,Game.homeTeam.players、Goal.scoreBy 和 Goal.passers 有对玩家对象的引用。

【问题讨论】:

  • 如何实例化toCreate对象?
  • 啊真的!刚刚编辑了我的代码以包含游戏的一些基本设置。
  • @AntonNovoselov 看起来在重新启动应用程序后,领域仍然有些混乱。将print(String(describing: realm.objects(Game.self))) 添加到 AppDelegate 会立即使应用程序崩溃,并出现相同的错误。我在 xcode 8.3.2 btw 上运行领域 2.7.0,并在模拟器上运行。

标签: ios swift list swift3 realm


【解决方案1】:

我需要回答我自己的问题。我的问题出在Goal-object 的自定义初始化代码中,如下所示:

    init(scoreBy:Player, scoreForTeam:GameTeam, passedBy:[Player]?, scoreTime:Date, homeScoreAfter:Int, awayScoreAfter:Int) {
        super.init()
        ... 
    }

此代码不会生成这样一个正常工作的领域对象。在没有自己的 init 方法的情况下创建 Goal-object 内联解决了这个问题。


编辑:虽然行为本身很奇怪 - 该构造函数是否应该工作,或者这是 Realm 中的错误?

【讨论】:

  • @DávidPásztor 啊抱歉,我不小心从我的固定代码中复制粘贴了返回值。
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 2012-06-22
  • 2015-05-29
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
相关资源
最近更新 更多