我最近将我的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很陌生,我希望,我在这里犯了一个愚蠢的小错误。提前感谢您的每一个想法..
干杯, 拉菲
答案 0 :(得分:0)
我发现了这个问题。我只是在错误的位置关闭了一个for循环。由于该问题最终与Realm或JSON无关,因此我不会发布更改。真的没有人帮助没人:)