Управляемая модель данных, включающая сущности (Entity), свойства (Property), запросы на получение данных (FetchRequest) и т. д.
Задача: добавление свойств сущностей, установка отношений между свойствами.
Методы: редактор интерфейса/код
Управляемый контекст данных
Задача: работа с реальными данными (работа с устойчивым слоем)
Задача: вставка, удаление, удаление данных
Устойчивый координатор хранения, аналог соединения с базой данных.
Задача: установка имени, местоположения, способа хранения и времени хранения данных. Используется для обработки низкоуровневого чтения и записи файлов данных, обычно с ним не работают напрямую.
Управляемая запись данных, аналог записи в таблице базы данных
Запрос на получение данных, аналог запроса SQL
Описание сущности, аналог структуры таблицы
① Выбор: используется исходный тип данных, указанный при определении.
② Отсутствие выбора: происходит преобразование типов, сценарии преобразования следующие:
· String соответствует String
· Integer 16/32/64, Float, Double и Boolean соответствуют NSNumber
· Decimal соответствует NSDecimalNumber
· Date соответствует NSDate
· Бинарные данные соответствуют NSData
· Преобразуемые данные соответствуют AnyObject
① Приложение сначала создает или читает файл модели (расширение xcdataModeld, после компиляции расширение momd), создавая объект NSManagedObjectModel.
② Создаются объекты NSManagedObjectContext и NSPersistentStoreCoordinator. Первый используется прозрачно для пользователя, второй выполняет чтение и запись файлов данных.
③ NSPersistentStoreCoordinator отвечает за чтение данных из файлов данных (xml, sqlite, двоичные файлы и т. д.) для создания объектов NSManagedObject или сохранения NSManagedObject в базу данных.
④ NSManagedObjectContext участвует во всех операциях с данными, удерживая объекты NSManagedObject. Этот класс используется чаще всего.
/**
* Вставка одной записи с помощью CoreData
* ① Сначала получаем объект сущности
* ② Устанавливаем значения свойств объекта сущности
* ③ Вызываем метод save контекста для сохранения
* Обратите внимание на проверку ошибок
*/
News *news = [NSEntityDescription insertNewObjectForEntityForName:kTableName inManagedObjectContext:self.context];
news.newId = @"1";
news.title = @"Звезды в День одиночества: соревнуются в публикациях";
news.isLook = @"0";
news.describe = @"Посмотрим, как звезды проводят День одиночества, соревнуясь в публикациях";
NSError *error = nil;
if (! [self.context save:&error]) {
NSLog(@"%@", [error localizedDescription]);
} else {
NSLog(@"Вставка успешна");
}
* Поиск данных
* ① Создание запроса fetchRequest
* ② Получение сущности для поиска
* ③ Установка сущности в запросе
* ④ Выполнение запроса через контекст
*/
NSError *error = nil;
if (! [self.context save:&error]) {
NSLog(@"%@", error.localizedDescription);
return;
}
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:kTableName inManagedObjectContext:self.context];
[request setEntity:entity];
NSArray *array = [self.context executeFetchRequest:request error:&error];
if (array) {
/*for (NSManagedObject *obj in array) {
NSString *newTitle = [obj valueForKey:@"title"];
NSLog(@"title %@", [obj class]);
}*/
for (News *obj in array) {
NSLog(@"title %@", [obj title]);
}
}
/**
* Поиск объекта с id=myID и установка его свойства isLook на значение isLook
* ① Поиск всех объектов, соответствующих условиям
* ② Изменение свойства объекта
* ③ Сохранение изменений через контекст
*/
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"newId like[cd] %@", newsId];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:kTableName inManagedObjectContext:self.context]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *array = [self.context executeFetchRequest:request error:&error];
for (News *obj in array) {
NSLog(@"%@", obj.isLook);
obj.isLook = isLook;
}
NSLog(@"%@", error);
if (! [self.context save:&error]) {
NSLog(@"Не удалось сохранить");
return;
}
NSLog(@"Успешно сохранено");
* Удаление всех данных
* ① Поиск всех объектов, соответствующих условиям
* ② Удаление объектов через контекст
* ③ Сохранение изменений через контекст
*/
NSEntityDescription *entity = [NSEntityDescription entityForName:kTableName inManagedObjectContext:self.context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setIncludesPropertyValues:NO];
NSError *error = nil;
NSArray *datas = [self.context executeFetchRequest:request error:&error];
if (!error && datas && [datas count]) {
for (News *obj in datas) {
[self.context deleteObject:obj];
}
if (![self.context save:&error]) {
NSLog(@"Удаление не удалось");
return;
}
NSLog(@"Удаление выполнено успешно");
}
####Demo2 Имитация базы данных для новостей NetEase ####Demo3 Один-к-одному ####Demo4 Один-к-многим ####Demo5 Перенос данных http://blog.163.com/djx421@126/blog/static/48855136201411381212985/ http://blog.csdn.net/jasonblog/article/details/17842535 http://www.2cto.com/kf/201605/508385.html
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )