1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/UIControl_admin-CoreData

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
chapter1.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 16:22 3b95c9e

CoreData

Подготовка

NSManagedObjectModel

Управляемая модель данных, включающая сущности (Entity), свойства (Property), запросы на получение данных (FetchRequest) и т. д.
Задача: добавление свойств сущностей, установка отношений между свойствами.
Методы: редактор интерфейса/код

NSManagedObjectContext

Управляемый контекст данных
Задача: работа с реальными данными (работа с устойчивым слоем)
Задача: вставка, удаление, удаление данных

NSPersistentStoreCoordinator

Устойчивый координатор хранения, аналог соединения с базой данных.
Задача: установка имени, местоположения, способа хранения и времени хранения данных. Используется для обработки низкоуровневого чтения и записи файлов данных, обычно с ним не работают напрямую.

NSManagedObject

Управляемая запись данных, аналог записи в таблице базы данных

NSFetchRequest

Запрос на получение данных, аналог запроса SQL

NSEntityDescription

Описание сущности, аналог структуры таблицы

Выбор опции "Use Scalar Properties For Primitive Data Types"

① Выбор: используется исходный тип данных, указанный при определении.
② Отсутствие выбора: происходит преобразование типов, сценарии преобразования следующие:
   · 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. Этот класс используется чаще всего.

Пример 1

Вставка

 /**
  *  Вставка одной записи с помощью 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/UIControl_admin-CoreData.git
git@api.gitlife.ru:oschina-mirror/UIControl_admin-CoreData.git
oschina-mirror
UIControl_admin-CoreData
UIControl_admin-CoreData
master