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

на главную

Жанры

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

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

Вечный. Книга VI

Рокотов Алексей
6. Вечный
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Вечный. Книга VI

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

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

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

Наследник павшего дома. Том III

Вайс Александр
3. Расколотый мир
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том III

Я тебя верну

Вечная Ольга
2. Сага о подсолнухах
Любовные романы:
современные любовные романы
эро литература
5.50
рейтинг книги
Я тебя верну

Релокант. По следам Ушедшего

Ascold Flow
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. По следам Ушедшего

Темный Патриарх Светлого Рода 2

Лисицин Евгений
2. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 2

Безнадежно влип

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Безнадежно влип

Законы Рода. Том 9

Flow Ascold
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9

Провинциал. Книга 8

Лопарев Игорь Викторович
8. Провинциал
Фантастика:
боевая фантастика
космическая фантастика
аниме
5.00
рейтинг книги
Провинциал. Книга 8

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II

Законы Рода. Том 8

Flow Ascold
8. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 8

Прометей: владыка моря

Рави Ивар
5. Прометей
Фантастика:
фэнтези
5.97
рейтинг книги
Прометей: владыка моря

Войны Наследников

Тарс Элиан
9. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Войны Наследников