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

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

Жанры

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

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

Шрифт:

UITableViewCell *cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier: PersonTableViewCell

forIndexPath: indexPath];

Person *person = [self.frc objectAtIndexPath: indexPath];

cell.textLabel.text =

[person.firstName stringByAppendingFormat:@" %@", person.lastName];

cell.detailTextLabel.text =

[NSString stringWithFormat:@"Age: %lu",

(unsigned long)[person.age unsignedIntegerValue]];

return cell;

}

В этом коде мы приказываем нашему контроллеру табличного вида отобразить столько ячеек, сколько экземпляров управляемых объектов находится в контроллере для представления результатов выборки. Отображая каждую ячейку, мы получаем управляемый объект Person из контроллера, представляющего результаты выборки, после чего соответствующим образом конфигурируем ячейку. Контроллер табличного вида, не содержащий никаких элементов в контексте управляемых объектов, будет выглядеть примерно как на рис. 16.11.

Рис. 16.11. Пустой табличный вид, построенный на базе контроллера для представления результатов выборки

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

— (void) createNewPerson:(id)paramSender{

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *managedObjectContext =

appDelegate.managedObjectContext;

Person *newPerson =

[NSEntityDescription insertNewObjectForEntityForName:@"Person"

inManagedObjectContext: managedObjectContext];

if (newPerson!= nil){

newPerson.firstName = self.textFieldFirstName.text;

newPerson.lastName = self.textFieldLastName.text;

newPerson.age = @([self.textFieldAge.text integerValue]);

NSError *savingError = nil;

if ([managedObjectContext save:&savingError]){

[self.navigationController popViewControllerAnimated: YES];

} else {

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

}

} else {

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

}

}

Этот метод считывает имя, фамилию и возраст человека. На основе этих трех информационных фрагментов в контроллере вида будет создаваться контакт. Нам не придется заниматься реализацией этих текстовых полей, поскольку такая работа никак не связана с темой данного раздела. После вызова метода мы вызываем в контексте управляемого объекта метод save:. Он, в свою очередь, инициирует изменения в контроллере вида для представления результатов выборки (он находится в табличном виде). В результате всего этого табличный вид обновится.

Наконец, мы должны предоставить пользователю возможность удалять элементы в контроллере первого (табличного) вида:

— (void) tableView:(UITableView *)tableView

commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

forRowAtIndexPath:(NSIndexPath *)indexPath{

Person *personToDelete = [self.frc objectAtIndexPath: indexPath];

[[self managedObjectContext] deleteObject: personToDelete];

if ([personToDelete isDeleted]){

NSError *savingError = nil;

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

NSLog(@"Successfully deleted the object");

} else {

NSLog(@"Failed to save the context with error = %@", savingError);

}

}

}

Этот код даже не затрагивает непосредственно сам контроллер для представления результатов выборки, но удаляет выбранный контакт из контекста управляемых объектов. В результате обновляется содержимое контроллера, представляющего результаты выборки, а это, в свою очередь, приводит к обновлению табличного вида. Подробнее о табличных видах рассказано в главе 4. Интерфейс нашего контроллера табличного вида в режиме удаления может выглядеть, примерно как на рис. 16.12.

Рис. 16.12. Табличный контроллер вида в режиме удаления, также здесь используется контроллер вида для представления результатов выборки

16.8. Реализация отношений в Core Data

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

Необходимо иметь возможность связывать управляемые объекты друг с другом, например связать контакт Person с каталогом Home, в котором он находится.

Решение

Применяйте в редакторе модели обратные отношения.

Обсуждение

В Core Data могут существовать следующие виды отношений: «один к одному» (one-to-one), обратное отношение «один ко многим» или обратное отношение «многие ко многим». Далее приведены жизненные примеры каждой разновидности отношений.

• Отношение «один к одному» — существует между человеком и его носом. У каждого человека может быть только один нос, и каждый нос может принадлежать только одному человеку.

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

Эволюционер из трущоб

Панарин Антон
1. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила

Индульгенция 1. Без права выбора

Машуков Тимур
1. Темный сказ
Фантастика:
аниме
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Индульгенция 1. Без права выбора

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

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

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Гранит науки. Том 1

Зот Бакалавр
1. Героями не становятся, ими умирают
Фантастика:
фэнтези
боевая фантастика
5.25
рейтинг книги
Гранит науки. Том 1

Месть Паладина

Юллем Евгений
5. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Месть Паладина

Антимаг

Гедеон Александр и Евгения
1. Антимаг
Фантастика:
фэнтези
6.95
рейтинг книги
Антимаг

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

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

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Семь Нагибов на версту часть 2

Машуков Тимур
2. Семь, загибов на версту
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Семь Нагибов на версту часть 2

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Битва за Изнанку

Билик Дмитрий Александрович
7. Бедовый
Фантастика:
городское фэнтези
мистика
5.00
рейтинг книги
Битва за Изнанку