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