【问题标题】:Retrieve Realm Object by Primary Key fails on iOS with Swift 3使用 Swift 3 在 iOS 上通过主键检索领域对象失败
【发布时间】:2016-10-18 07:25:39
【问题描述】:

我最近将我的 iOS 项目升级到了 Swift 3 和 iOS 10。从那时起,我在 Realm 中遇到了一个奇怪的问题。

这是我尝试做的事情:我有一组职位,我想使用服务器数据对其进行更新。因此,对于每个现有职位,如果存在更新版本,我想对其进行更新。如果有一个本地不存在的服务器位置,那么我添加它。

这是代码:

let newPositions = serializePositions(jsonResponse)
for newPosition in newPositions {
    if let existingPositon = uiRealm.object(ofType: Position.self, forPrimaryKey: newPosition.id as String) {
        if (progress.learningVersion < serverLearningVersion) {
            try! uiRealm.write {
                existingPositon.rank = newPosition.rank
                existingPositon.starred = newPosition.starred
            }
        }
    } else {
        try! uiRealm.write {
            progress.positions.append(newPosition)
        }
    }
}

如果我运行它,就会发生奇怪的事情:

对于循环中的第一个项目(第一个位置),它可以正常工作。 但是对于以下职位,即使现有职位存在,我也会得到零。

位置模型中的主键是一个字符串字段,我使用来自服务器的 MongoDB 对象 ID。

这是从 JSON 序列化职位的方式:

func serializePositions(_ json: JSON) -> List<Position> {
    let positions = List<Position>()
    let serverPositions = json["positions"].arrayValue
    for serverPosition in serverPosition {
        let position = Position()
        position.id = listItem["id"].stringValue
        position.starred = listItem["starred"].boolValue
        position.rank = listItem["version"].intValue
        positions.append(position)
    }
    return positions
}    

我对 Realm 和 iOS 还很陌生,我希望我只是在这里犯了一个愚蠢的小错误。提前感谢您的每一个想法..

干杯, 拉菲

【问题讨论】:

  • 能否分享一下 JSON 输入和 Realm 之前的状态。如果没有输入,就很难诊断为什么您没有得到您希望的输出!

标签: ios swift mongodb realm swift3


【解决方案1】:

我发现了这个问题。我只是在错误的位置关闭了一个 for 循环。由于问题最终与 Realm 或 JSON 无关,因此我没有发布更改。真的对任何人都没有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多