【发布时间】:2015-09-09 08:32:01
【问题描述】:
我有一个从 Web 服务下载 json 内容的 restfull 应用程序。第一次调用 Web 服务时,我将所有对象缓存在核心数据中。 再次调用时出现问题。 我需要更新已更改的,删除不存在的并插入所有新的。我正在获取所有本地对象和所有接收到的对象,循环插入或更新,然后删除未修改的对象。问题是我的算法很烂,而且效率很低。使核心数据与 Web 服务保持同步的最佳做法是什么?
已编辑:
func updateRestaurantsFromJson(dataArray:[[String: AnyObject]]) {
var currentRestaurants = getAllRestaurants()
for restaurantDictionary in dataArray {
if let restaurant = DBRestaurant.fromJson(restaurantDictionary) {
if let index = find(currentRestaurants, restaurant) {
currentRestaurants.removeAtIndex(index)
}
}
}
removeRestaurants(currentRestaurants)
}
我正在创建一个包含所有当前对象的数组,在 DBRESTaurant.fromJson 中插入/更新并删除未触及的对象。
class func fromJson(data: [String: AnyObject]) -> DBRestaurant? {
if let id = data["id"] as? String {
var obj = DBRestaurant.withId(id)
var result: DBRestaurant
if obj == nil {
result = newRestaurant()
result.restaurantID = id
} else {
result = obj!
}
result.updateWithJson(data)
DataManager.save(nil)
return result
} else {
return nil
}
}
class func withId(id: String) -> DBRestaurant? {
let fetchRequest = NSFetchRequest(entityName: kDBRestaurant)
fetchRequest.predicate = NSPredicate(format: "restaurantID = %@", id)
let restaurant = (self.managedObjectContext.executeFetchRequest(fetchRequest, error: nil) as! [DBRestaurant]).first
return restaurant
}
【问题讨论】:
-
您是否考虑过使用第三方库,例如 RestKit?
-
老实说,我可以考虑更快地找到解决方案,但我真的很想了解事情是如何完成的。
-
如果您希望在当前方法上使用 cmets,您需要显示代码
标签: swift rest core-data insert-update