使用Swift 3在iOS上通过主键检索Realm对象失败

时间:2016-10-18 07:25:40

标签: ios swift mongodb realm swift3

我最近将我的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)
        }
    }
}

如果我这样做,会发生一些奇怪的事情:

对于循环中的firstItem(第一个Position),它可以正常工作。 但是对于以下职位,我对现有职位的评分为零,即使它存在。

位置模型中的主键是一个字符串字段,我使用来自服务器的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很陌生,我希望,我在这里犯了一个愚蠢的小错误。提前感谢您的每一个想法..

干杯, 拉菲

1 个答案:

答案 0 :(得分:0)

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