2010-11-07 3 views
0

В RootViewController Я делаю запрос на выборку в хранилище основных данных (?), И он возвращает NSSet, скажем, рецептов. Когда пользователь выбирает рецепт в контроллере rootview, я выполняю pushViewController и выталкиваю один из рецептов в childcontroller.NSFetchedResultsController и childController

В childController у пользователя есть возможность обновить «рецепт», чтобы он мог обновлять ингредиенты, например. Когда пользователи выбирают «обновить», я подключаюсь к межсетевым соединениям для получения новых данных. Эти новые данные я помещаю в self.recipe.ingredients.

Все это прекрасно работает. Но затем я хочу перезагрузить представление chilController. Все освежающие вещи выполняются в фоновом режиме, поэтому я хочу излучать сигнал, когда материал основных данных закончен.

Hello NSFetchedResultsController! Но для использования NSFetchedResultsController вам нужен NSFetchRequest. И этот NSFetchRequest создается в моем корневом контролере.

Итак, когда я создаю метод controllerDidChangeContent в моем корневом контролере, я вижу, что он запускается. Но теперь возникает вопрос: как я могу обновить табличное представление childViewController?

Я думал о вызове этого метода в методе моего rootViewControllers' controllerDidChangeContent: [self.childController controllerDidChangeContent: контроллер] Так просто проходя по огневому методу

Или когда инстанцирования childController, я мог бы также передать на fetchRequest к childController и создание экземпляра нового NSFetchedResultsController в экземпляре childController.

Что было бы лучшим из этих двух? Или есть другие возможности, о которых я не думал?

Заранее благодарен!

ответ

0

Я решил это в одном из своих проектов несколько иначе. У меня есть дочерний контроллер, создающий и использующий собственный NSFetchRequest. Он работает хорошо, но мне было бы интересно услышать, если кто-то рекомендует другой подход.

Итак, используя условия вашего приложения, вот оно: В childController я создал новый NSFetchRequest, используя объект Ingredient, и наложил на него предикат, чтобы найти все ингредиенты из моего Рецепта. Примечание: это предполагает, что у вас есть обратная связь от Ингредиента обратно к Рецепту.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ingredient" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recipe == %@", self.recipe]; 
[fetchRequest setPredicate:predicate]; 

Так childController использует этот fetchRequest вместо NSFetchRequest найдены в RootViewController. Всякий раз, когда Ингредиент добавляется, удаляется или обновляется, childController теперь получает сообщение. Просто не забывайте, что childController должен будет реализовать протокол NSFetchedResultsControllerDelegate.

+0

Спасибо, dnorcott. Я пойду с созданием нового объекта nsfetchrequest & nsfetchedresultscontroler в childController. – Leon

Смежные вопросы