У меня есть список элементов на моем сервере, копия которых у моего приложения есть в CoreData.
Один из моих веб-API загружает актуальный список.
Я успешно написал код, который обновляет столбцы и добавляет новые строки/элементы в мое локальное хранилище CoreData. Вот код для обработки элемента, полученного с сервера («имя» однозначно идентифицирует строку, предположим, что Object
— это сущность):
NSFetchRequest* request = [[NSFetchRequest alloc] init];
[request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", dictionary[@"name"]]];
[request setEntity:[NSEntityDescription entityForName:@"Object"
inManagedObjectContext:managedObjectContext]];
error = nil;
ObjectData* object = [[managedObjectContext executeFetchRequest:request error:&error] lastObject];
//### Handle error.
if (object == nil)
{
object = (ObjectData*)[NSEntityDescription insertNewObjectForEntityForName:@"Object"
inManagedObjectContext:managedObjectContext];
}
object.name = dictionary[@"name"];
object.place = dictionary[@"place"];
...
error = nil;
[managedObjectContext save:&error];
//### Handle error.
Приведенный выше код синхронизирует существующие и новые элементы с сервера в CoreData. Однако строки, которые были удалены на сервере, не удаляются из CoreData.
Каков эффективный способ синхронизации удалений? Примечание. У Objects
есть отношения, поэтому простое удаление всего лота и добавление их снова не сработает.
Например, как сформировать запрос, удаляющий все строки, имя которых отсутствует в загруженном списке обновлений?