У меня есть приложение restfull, которое загружает содержимое json из веб-службы. При первом вызове веб-службы я кэширую все объекты в основных данных. Проблема возникает при повторном вызове. Мне нужно обновить измененные, удалить те, которые не присутствуют, и вставить все новые. Я получаю все локальные объекты и все полученные, зацикливание для вставки или обновления, а затем удаление тех, которые не были изменены. Проблема в том, что мой алгоритм отстой, и это действительно неэффективно. Какая практика заключается в том, чтобы синхронизировать основные данные с веб-службой?Обновление основных данных из веб-службы. (insert/update/delete)
EDITED:
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? – Wain
Честно говоря, я мог бы подумать, что найти решение быстрее, но я бы очень хотел узнать, как это делается. –
Если вам нужны комментарии к вашему текущему подходу, вам нужно показать код – Wain