Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

[self.window makeKeyAndVisible];

return YES;

}

В данном коде мы используем переменную счетчика внутри блока быстрого перебора. Причина, по которой в ходе этого быстрого перебора требуется счетчик, заключается в том, что на консоль выводятся отладочные сообщения NSLog, которые мы просматриваем, чтобы узнать для перечисляемого в данный момент объекта его индекс в массиве. Альтернативным вариантом решения было бы использование классического for-цикла с переменной счетчика.

Подробнее о запросах

выборки данных поговорим в подразделе «Обсуждение» данного раздела.

Обсуждение

Тем, кто знаком с терминологией баз данных, запрос выборки данных напомнит оператор SELECT. В операторе SELECT мы указываем, какие строки и при каких условиях должны быть возвращены из какой таблицы. Запрос выборки данных делает то же самое. Мы указываем сущность (таблицу) и контекст управляемых объектов (уровень базы данных). Кроме того, можем задавать дескрипторы сортировки для данных, которые мы считываем. Но сначала поговорим о том, как упростить сам процесс считывания данных.

Чтобы считать сущность Person (эту сущность мы создали в разделе 16.1 и превратили ее в код в разделе 16.2), мы сначала приказываем классу NSEntityDescription произвести в нашем контексте управляемых объектов поиск сущности под названием Person. Как только она будет найдена, сообщим запросу выборки данных, что требуется считать информацию из этой сущности. После этого нам останется всего лишь выполнить запрос выборки данных, как было показано в подразделе «Решение» данного раздела.

Метод экземпляра executeFetchRequest: error:, относящийся к классу NSManagedObjectContext, может иметь в качестве возвращаемого значения либо nil (в случае ошибки), либо массив управляемых объектов Person. Если по заданной сущности не найдено никаких результатов, то возвращенный массив будет пустым.

См. также

Разделы 16.1 и 16.2.

16.5. Удаление данных из Core Data

Постановка задачи

Требуется удалить управляемый объект (строку таблицы) из контекста управляемых объектов (вашей базы данных).

Решение

Воспользуйтесь методом экземпляра deleteObject:, относящимся к классу NSManagedObjectContext:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[self createNewPersonWithFirstName:@"Anthony"

lastName:@"Robbins"

age:51];

[self createNewPersonWithFirstName:@"Richard"

lastName:@"Branson"

age:61];

/* Сначала создаем запрос выборки данных. */

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSError *requestError = nil;

/* Теперь
применим запрос выборки данных к контексту. */

NSArray *persons =

[self.managedObjectContext executeFetchRequest: fetchRequest

error:&requestError];

/* Убеждаемся, что получили массив. */

if ([persons count] > 0){

/* Удаляем последний контакт из массива. */

Person *lastPerson = [persons lastObject];

[self.managedObjectContext deleteObject: lastPerson];

NSError *savingError = nil;

if ([self.managedObjectContext save:&savingError]){

NSLog(@"Successfully deleted the last person in the array.");

} else {

NSLog(@"Failed to delete the last person in the array.");

}

} else {

NSLog(@"Could not find any Person entities in the context.");

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

В приведенном примере кода используется метод createNewPersonWithFirstName: lastName: age:, который мы написали в разделе 16.4.

Обсуждение

Можно удалять управляемые объекты (записи из таблицы базы данных) с помощью метода экземпляра deleteObject:, относящегося к классу NSManagedObjectContext.

Ни в одном из своих параметров этот метод не сообщает вам об ошибке, равно как и не возвращает значения BOOL. Таким образом, у вас нет надежного способа узнать, был ли объект успешно удален с помощью контекста управляемых объектов. Для получения этой информации лучше использовать метод isDeleted управляемого объекта.

С учетом данной информации изменим код, написанный ранее в этом разделе:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[self createNewPersonWithFirstName:@"Anthony"

lastName:@"Robbins"

age:51];

[self createNewPersonWithFirstName:@"Richard"

lastName:@"Branson"

Поделиться:
Популярные книги

Арестант

Константинов Андрей Дмитриевич
7. Бандитский Петербург
Детективы:
боевики
8.29
рейтинг книги
Арестант

Враг Империи

Медведев Антон Николаевич
Фантастика:
боевая фантастика
7.00
рейтинг книги
Враг Империи

О любви

Жуховицкий Леонид Аронович
Проза:
рассказ
5.00
рейтинг книги
О любви

Анатомия зла

Мандалян Элеонора Александровна
Фантастика:
научная фантастика
5.00
рейтинг книги
Анатомия зла

Электрические тела

Харрисон Колин
Детективы:
прочие детективы
6.60
рейтинг книги
Электрические тела

Человек-землетрясение

Конзалик Хайнц
Приключения:
прочие приключения
5.00
рейтинг книги
Человек-землетрясение

Я бог. Книга XXXIX

Дрейк Сириус
39. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я бог. Книга XXXIX

Офицеры и джентльмены

Во Ивлин
Проза:
современная проза
7.00
рейтинг книги
Офицеры и джентльмены

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Русская литература сегодня. Жизнь по понятиям

Чупринин Сергей
Русская литература сегодня
Документальная литература:
публицистика
5.00
рейтинг книги
Русская литература сегодня. Жизнь по понятиям

Двое, не считая призраков

Нестерова Наталья Владимировна
Проза:
современная проза
8.41
рейтинг книги
Двое, не считая призраков

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.60
рейтинг книги
Тринадцатый II

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Добыча. Всемирная история борьбы за нефть, деньги и власть

Ергин Дэниел
Документальная литература:
публицистика
5.00
рейтинг книги
Добыча. Всемирная история борьбы за нефть, деньги и власть