第一个回应是我得到两个用户,即abc@gmail.com& xyz@gmail.com
[{
"email": "abc@gmail.com",
"type": "primary_email",
"linked_to": {
"_id": "DAS44564dasdDASd",
"image": null,
"company": null,
"designation": null,
"name": null
},
"active_platforms": [
"asd",
"qwe"
]
},
{
"email": "xyz@gmail.com",
"type": "primary_email",
"linked_to": {
"_id": "DAS44564dasdDASd",
"image": null,
"company": null,
"designation": null,
"name": null
},
"active_platforms": [
"asd",
"qwe"
]
}]
现在如果我再次进行API调用就删除了abc@gmail.com,那么我仍然会在我的对象中获得abc@gmail.com,因为它没有从我的域中删除。那么如何处理这种情况?
// write request result to realm database
let entries = json["data"]
realm.beginWrite()
for (_, subJson) : (String, JSON) in entries {
let entry: AppUsers = Mapper<AppUsers>().map(JSONObject: subJson.dictionaryObject!)!
realm.add(entry, update: true)
}
do {
try realm.commitWrite()
} catch {
}
答案 0 :(得分:1)
更新您的逻辑如下。这是其中一种方法。
向AppUsers模型添加一个额外的bool字段,说'active'。更新您的代码如下
// write request result to realm database
let entries = json["data"]
realm.beginWrite()
//Fetch all realm AppUsers objects
let allAppUsers = //TODO fetch all AppUsers objects here
for user in allAppUsers {
user.active = false
}
for (_, subJson) : (String, JSON) in entries {
let entry: AppUsers = Mapper<AppUsers>().map(JSONObject: subJson.dictionaryObject!)!
entry.active = true
realm.add(entry, update: true)
}
for user in allAppUsers {
if !user.active {
realm.delete(user)
}
}
do {
try realm.commitWrite()
} catch {
}
答案 1 :(得分:1)
这听起来像是一个问题,即Realm数据库中的数据已经过时,因为内容不再与服务器上的内容相匹配。
Realm API realm.add(_, update: true)
将更新传递给它的任何对象,但只是不传递对象并不意味着它应该被删除(更多,你只是不想更新它)。
Realm无法自动知道是否需要删除对象。你自己需要掌握这种逻辑。
由于检查对象是否被删除的机制是通过其电子邮件地址,因此您可以捕获已更新的每个对象的电子邮件地址,然后删除其电子邮件地址不在其中的任何其他对象。 / p>
// write request result to realm database
realm.beginWrite()
let entries = json["data"]
var updatedEmails = [String]()
for (_, subJson) : (String, JSON) in entries {
let entry: AppUsers = Mapper<AppUsers>().map(JSONObject: subJson.dictionaryObject!)!
// Save the email we just processed
updatedEmails.append(entry.email)
realm.add(entry, update: true)
}
// Delete all objects not in the updated emails list
let realmEntries = realm.objects(AppUsers.self)
for entry in realmEntries {
if !updatedEmails.contains(entry.email) {
realm.delete(entry)
}
}
do {
try realm.commitWrite()
} catch {
}
如果您的REST API每次都以完整的形式关闭所有对象,那么更快的解决方案也是每次只清空Realm文件,并且每次只是将对象添加为新对象。