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

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

Жанры

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

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

Шрифт:

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];

if ([lastPerson isDeleted]){

NSLog(@"Successfully deleted the last person…");

NSError *savingError = nil;

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

NSLog(@"Successfully saved the context.");

} else {

NSLog(@"Failed to save the context.");

}

} else {

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

}

} 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;

}

После запуска приложения в окне консоли отобразится примерно следующий результат:

Successfully deleted the last person… // последний контакт успешно удален

Successfully saved the context. // контекст успешно сохранен

16.6. Сортировка данных в Core Data

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

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

Решение

Нужно создать по экземпляру класса NSSortDescriptor для каждого атрибута (в терминологии баз данных — столбца) той сущности, в которой требуется произвести сортировку. Дескрипторы сортировки добавляются к массиву, а сам массив присваивается экземпляру NSFetchRequest с помощью метода экземпляра setSortDescriptors:. В данном коде, приведенном в качестве примера, Sorting_Data_in_Core_DataAppDelegate — это класс, представляющий делегат универсального приложения (о том, как создается сущность Person, рассказано в разделах 16.1 и 16.2:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[self createNewPersonWithFirstName:@"Richard"

lastName:@"Branson"

age:61];

[self createNewPersonWithFirstName:@"Anthony"

lastName:@"Robbins"

age:51];

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

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]

initWithEntityName:@"Person"];

NSSortDescriptor *ageSort =

[[NSSortDescriptor alloc] initWithKey:@"age"

ascending: YES];

NSSortDescriptor *firstNameSort =

[[NSSortDescriptor alloc] initWithKey:@"firstName"

ascending: YES];

fetchRequest.sortDescriptors = sortDescriptors;

/* Сообщаем запросу, что сначала мы хотим

считать содержимое сущности Person. */

[fetchRequest setEntity: entity];

NSError *requestError = nil;

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

NSArray *persons =

[self.managedObjectContext executeFetchRequest: fetchRequest

error:&requestError];

for (Person *person in persons){

NSLog(@"First Name = %@", person.firstName);

NSLog(@"Last Name = %@", person.lastName);

NSLog(@"Age = %lu", (unsigned long)[person.age unsignedIntegerValue]);

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Обсуждение

Экземпляр класса NSFetchRequest может нести с собой массив экземпляров NSSortDescriptor. Каждый дескриптор сортировки определяет атрибут (столбец) актуальной сущности, в которой необходимо произвести сортировку. Кроме того, он указывает порядок сортировки — восходящий или нисходящий. Например, сущность Person, которую мы создали в разделе 16.1, имеет атрибуты firstName, lastName и age. Если мы хотим считать все контакты в контексте управляемых объектов и отсортировать этих людей по возрасту, от самого младшего до самого старшего, то создадим экземпляр NSSortDescriptor с ключом age и зададим для него восходящий порядок (ascending):

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

Наследие Маозари 7

Панежин Евгений
7. Наследие Маозари
Фантастика:
боевая фантастика
юмористическое фэнтези
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 7

Майами

Фишер Марк
Детективы:
триллеры
6.40
рейтинг книги
Майами

Самые знаменитые произведения писателя в одном томе

Брэдбери Рэй Дуглас
Фантастика:
фантастика: прочее
4.00
рейтинг книги
Самые знаменитые произведения писателя в одном томе

Древесный маг Орловского княжества 10

Павлов Игорь Васильевич
10. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 10

Моров. Том 3

Кощеев Владимир
2. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Моров. Том 3

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Азеф

Гуль Роман Борисович
Проза:
историческая проза
6.00
рейтинг книги
Азеф

Я снова царь. Книга XXXIII

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

Приказано выжить!

Малыгин Владимир
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.09
рейтинг книги
Приказано выжить!

Палач

Зайцев Сергей Григорьевич
4. Викс
Фантастика:
фэнтези
7.27
рейтинг книги
Палач

На границе империй. Том 10. Часть 10

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 10

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Изгои

Владимиров Денис
5. Глэрд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Изгои