Как контролировать поток данных между ViewControllers - PullRequest
0 голосов
/ 15 марта 2011

Начну с того, что я новичок в Objective-C и iPhone, но у меня есть история на C ++, Java, AS3, ...

Я пытаюсь создать какой-то RSS Readerи у меня есть массив для всех моих каналов.Как лучше всего сохранить новые каналы в этом массиве?У меня есть проект на основе навигации, и у меня есть кнопка добавления, которая выдвигает viewController сверху для ввода нового фида URL.

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

Ответы [ 3 ]

1 голос
/ 16 марта 2011

Я сам предпочитаю одноэлементный метод, но Apple рекомендует внедрять зависимости, то есть передавать объект модели данных из контроллера представления в представление контроллера по мере необходимости.

Если вы посмотрите на базовые данные, использующие проект навигации по шаблонам в XCode, вы увидите, как это работает. Контекст managedObject - это модель данных, которая инициализируется и хранится делегатом приложения. Вы можете получить к нему доступ двумя способами:

(1) Поскольку сами экземпляры приложения являются одноэлементными, вы можете запросить у него его делегат, а затем запросить у делегата его свойство managedObjectContest. Итак, в контроллере представления вы бы имели свойство managedObjectContext с пользовательским геттером, определенным как:

(NSManagedObjectContext *) managedObjectContext{
    if (managedObjectContext !=nil){
        return managedObjectContext;
    }
    // this is basically applicationObject.delegate.managedObjectContext
    self.managedObjectContext=[[[NSApplication sharedApplication] delegate] managedObjectContext];
    return managedObjectContext
}

(2) В качестве альтернативы, когда представление открывает другое представление, оно просто присваивает свойству managedObjectContext следующего представления свое собственное. Так что каждое представление открывается с контекстом. Это полезно, если у вас есть несколько объектов данных по какой-то причине.

Если вы просто используете массив или пользовательский класс модели данных, просто замените его имя для управляемого объекта объекта в приведенном выше коде.

0 голосов
/ 15 марта 2011

Возможно, вы захотите сохранить элементы фида в памяти, используя одиночный код

Что-то похожее на то, что используется: Единый общий источник данных в Objective-C

0 голосов
/ 15 марта 2011

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

...