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

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

Жанры

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

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

Шрифт:

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Обсуждение

В предыдущих разделах было показано, как с помощью редактора Xcode создавать сущности и генерировать на их основе код. Далее нужно приступить к использованию этих сущностей и инстанцировать их. Для этого мы используем

класс NSEntityDescription и вызываем метод insertNewObjectForEntityForName: inManagedObjectContext: этого класса. В таком случае будет производиться поиск заданной сущности (указанной с именем NSString) в обозначенном контексте управляемых объектов. Ситуация напоминает процесс создания новой строки (управляемый объект) в таблице (сущность) базы данных (контекст управляемых объектов).

При попытке вставить в контекст управляемых объектов неизвестную сущность возникнет исключение типа NSInternalInconsistencyException.

После того как в контекст будет вставлена новая сущность, его необходимо сохранить. В результате все несохраненные данные контекста будут сброшены в долговременную память. Это можно сделать с помощью метода экземпляра save:, относящегося к нашему контексту управляемых объектов. Если логическое (BOOL) возвращаемое значение этого метода равно YES, мы можем быть уверены, что контекст сохранен. В разделе 16.4 будет рассмотрено, как считывать данные назад в оперативную память.

16.4. Считывание данных из Core Data

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

Требуется считывать содержимое ваших сущностей (таблиц) с помощью Core Data.

Решение

Воспользуйтесь экземпляром класса NSFetchRequest:

— (BOOL) createNewPersonWithFirstName:(NSString *)paramFirstName

lastName:(NSString *)paramLastName

age:(NSUInteger)paramAge{

BOOL result = NO;

if ([paramFirstName length] == 0 ||

[paramLastName length] == 0){

NSLog(@"First and Last names are mandatory.");

return NO;

}

Person *newPerson = [NSEntityDescription

insertNewObjectForEntityForName:@"Person"

inManagedObjectContext: self.managedObjectContext];

if (newPerson == nil){

NSLog(@"Failed to create the new person.");

return NO;

}

newPerson.firstName = paramFirstName;

newPerson.lastName = paramLastName;

newPerson.age = @(paramAge);

NSError *savingError = nil;

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

return YES;

} else {

NSLog(@"Failed to save the new person. Error = %@", savingError);

}

return result;

}

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

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

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

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

Ботаник 2

Щепетнов Евгений Владимирович
2. Ботаник
Фантастика:
фэнтези
боевая фантастика
6.00
рейтинг книги
Ботаник 2

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Искатель 6

Шиленко Сергей
6. Валинор
Фантастика:
рпг
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Искатель 6

Я все еще барон

Дрейк Сириус
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Я все еще барон

Рыцари порога.Тетралогия

Злотников Роман Валерьевич
Рыцари порога
Фантастика:
боевая фантастика
7.92
рейтинг книги
Рыцари порога.Тетралогия

Барон обходит правила

Ренгач Евгений
14. Закон сильного
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Барон обходит правила

Глэрд IX: Легионы во Тьме

Владимиров Денис
9. Глэрд
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Глэрд IX: Легионы во Тьме

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Возвращение

Кораблев Родион
5. Другая сторона
Фантастика:
боевая фантастика
6.23
рейтинг книги
Возвращение

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6