Как я могу приостановить работу NSFetchedResultsController? - PullRequest
2 голосов
/ 12 декабря 2010

У меня есть UITableViewController, питаемый NSFetchedResultsController. Из него пользователь может вызвать модальный ViewController, в который он может вводить новые данные. Когда это начинается, я создаю временный объект следующим образом:

newPtr = [[Entry alloc] initWithEntity:[NSEntityDescription
entityForName:@"Entry" inManagedObjectContext:self.nmocontext]
insertIntoManagedObjectContext:self.nmocontext];

Когда пользователь делает выбор, атрибуты этого «временного» объекта, newPtr, устанавливаются.

Проблема в том, что базовый UITableViewController остается активным, пока модальный ViewController виден. Похоже, что он взбешен (вызывает сбои) в некоторых случаях, когда понимает, что обязательный атрибут newPtr еще не установлен.

Что я могу сделать, чтобы остановить просмотр NSFetchedResultsController контекста моего управляемого объекта до тех пор, пока модальный ViewController не будет закрыт?

Ответы [ 2 ]

1 голос
/ 12 декабря 2010

Я сам не проверял это, но возможный подход состоял бы в том, чтобы реализовать viewWillAppear и viewWillDisappear, и установить для делегата fetchedResultsController значение self на , появится и nil на исчезнет .

OR

Вы можете создать объект NSObject, который отражает атрибуты объекта NSManagedObject в окне редактирования. Как только пользователь закончит редактирование атрибутов (и вы запустите соответствующие правила проверки), вы можете передать их обратно в свой экземпляр NSManagedObject и позволить fetchedResultsController выполнить свою работу.

0 голосов
/ 17 октября 2016

Базовые данные поддерживают «вложенные» контексты управляемых объектов, которые допускают гибкую архитектуру, которая упрощает поддержку независимых, отменяемых наборов изменений. С помощью дочернего контекста вы можете разрешить пользователю вносить набор изменений в управляемые объекты, которые затем могут быть либо полностью переданы родительскому объекту (и в конечном итоге сохранены в хранилище) в виде одной транзакции, либо отменены. Если все части приложения просто извлекают один и тот же контекст, скажем, из делегата приложения, это затрудняет или делает невозможным поддержание этого поведения.

...