iOS. Приемы программирования
вернуться

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

Шрифт:

Вот типичная реализация вышеупомянутых методов в приложении, которое было описано ранее в этом разделе:

— (void) controllerWillChangeContent:(NSFetchedResultsController *)controller{

[self.tableView beginUpdates];

}

— (void) controller:(NSFetchedResultsController *)controller

didChangeObject:(id)anObject

atIndexPath:(NSIndexPath *)indexPath

forChangeType:(NSFetchedResultsChangeType)type

newIndexPath:(NSIndexPath *)newIndexPath{

if (type == NSFetchedResultsChangeDelete){

[self.tableView

deleteRowsAtIndexPaths:@[indexPath]

withRowAnimation: UITableViewRowAnimationAutomatic];

}

else if (type == NSFetchedResultsChangeInsert){

[self.tableView

insertRowsAtIndexPaths:@[newIndexPath]

withRowAnimation: UITableViewRowAnimationAutomatic];

}

}

— (void) controllerDidChangeContent:(NSFetchedResultsController *)controller{

[self.tableView endUpdates];

}

Остановимся также на передаче информации в табличный вид с помощью различных методов контроллера для представления результатов выборки — об этом мы также упоминали ранее. Одним из таких методов является objectAtIndexPath:. Простая реализация этого метода в табличном виде может выглядеть примерно так:

— (NSInteger)tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section{

id <NSFetchedResultsSectionInfo> sectionInfo =

self.frc.sections[section];

return sectionInfo.numberOfObjects;

}

— (UITableViewCell *)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath{

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;

  • Читать дальше
  • 1
  • ...
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win