— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[self createNewPersonWithFirstName:@"Anthony"
lastName:@"Robbins"
age:51];
[self createNewPersonWithFirstName:@"Richard"
lastName:@"Branson"
age:61];
/* Сообщаем запросу, что мы собираемся считать содержимое
сущности Person */
/* Сначала создаем запрос выборки данных. */
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]
initWithEntityName:@"Person"];
NSError *requestError = nil;
/* И применяем к контексту запрос выборки данных. */
NSArray *persons =
[self.managedObjectContext executeFetchRequest: fetchRequest
error:&requestError];
/* Убеждаемся, что получили массив. */
if ([persons count] > 0){
/* По порядку перебираем все контакты, содержащиеся в массиве. */
NSUInteger counter = 1;
for (Person *thisPerson in persons){
NSLog(@"Person %lu First Name = %@",
(unsigned long)counter,
thisPerson.firstName);
NSLog(@"Person %lu Last Name = %@",
(unsigned long)counter,
thisPerson.lastName);
NSLog(@"Person %lu Age = %ld",
(unsigned long)counter,
(unsigned long)[thisPerson.age unsignedIntegerValue]);
counter++;
}
} 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;
}
В данном коде мы используем переменную счетчика внутри блока быстрого перебора. Причина, по которой в ходе этого быстрого перебора требуется счетчик, заключается в том, что на консоль выводятся отладочные сообщения NSLog, которые мы просматриваем, чтобы узнать для перечисляемого в данный момент объекта его индекс в массиве. Альтернативным вариантом решения было бы использование классического for-цикла с переменной счетчика.
Подробнее о запросах выборки данных поговорим в подразделе «Обсуждение» данного раздела.
Обсуждение
Тем, кто знаком с терминологией баз данных,
Чтобы считать сущность Person (эту сущность мы создали в разделе 16.1 и превратили ее в код в разделе 16.2), мы сначала приказываем классу NSEntityDescription произвести в нашем контексте управляемых объектов поиск сущности под названием Person. Как только она будет найдена, сообщим запросу выборки данных, что требуется считать информацию из этой сущности. После этого нам останется всего лишь выполнить запрос выборки данных, как было показано в подразделе «Решение» данного раздела.
Метод экземпляра executeFetchRequest: error:, относящийся к классу NSManagedObjectContext, может иметь в качестве возвращаемого значения либо nil (в случае ошибки), либо массив управляемых объектов Person. Если по заданной сущности не найдено никаких результатов, то возвращенный массив будет пустым.
См. также
Разделы 16.1 и 16.2.