【发布时间】: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