У меня есть база данных в моем приложении. Я использую основные данные. Мне нужно обновить локальную базу данных информацией, поступающей с сервера. Я хочу сократить время обновления БД. Предположим, у меня есть таблица с тремя полями «ID», «Имя», «Файл». В атрибуте «файл» сохраняются некоторые большие двоичные данные. Вот код для обновления моей БД.Как сохранить контекст в Core Data
NSEntityDescription *entity=[NSEntityDescription entityForName:@"Entity" inManagedObjectContext:context];
NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
[fetch setEntity:entity];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ID == %@", newObject.objectID];
[fetch setPredicate:predicate];
NSError *fetchError;
NSArray *fetchedEntities = [managedObjectContext executeFetchRequest:fetch error:&fetchError];
NSManagedObject *objectToUpdate = [fetchedEntities firstObject];
objectToupdate.name = newObject.name;
BOOL isRecordUpdated = objectToupdate.isUpdated; // returns YES.
NSError *saveError;
[managedObjectContext save:&saveError];
Я нашел запись с идентификатором и изменил ее название, а затем сохранил контекст. Объект изменен, и я уверен, что он обновлен на сервере. Вопрос в том, как работает обновление. Будет ли он переписывать всю запись? Я имею в виду, что происходит с атрибутом «файл», также ли он переписан? Если да, то как избежать перезаписи больших полей, которые не изменены.
Ещё один случай. Что делать, если я переписываю имя с новой равной строкой?
NSString *name = [NSString stringWithFormat:@"%@", objectToUpdate.name];
BOOL nameChanged = firstName != contact.firstName; // returns YES
BOOL nameIsEqual = [firstName isEqualToString:contact.firstName]; //returns YES
objectToUpdate.name = name;
BOOL hasChanges = [NSManagedObjectContext.defaultContext hasChanges]; //returns YES
Я не изменил содержание имени, но я изменил значение имени. Если я сохраню контекст, он перепишет базу данных? Целью этого вопроса является понимание того, как эффективно работать с основными данными. Должен ли я писать пользовательские свойства для сравнения содержимого строк или хранить большие данные в отдельной таблице? Спасибо за чтение до сих пор и жаль, что он многословный.
Спасибо за ответ ypur. Я думаю, что это решает половину проблемы. Но что делать со второй частью. Я использую Magical Record для импорта данных из JSON в локальную БД и перезаписывает все записи вместо обновления записей, которые были изменены. – PSsam