Обмен данными между представлениями через App Delegate - PullRequest
1 голос
/ 19 марта 2009

У меня есть вопрос об обмене данными между представлениями, надеюсь, это не слишком просто. У меня есть NSMutableArray в appDelegate с скажем (Object1, Object2, Object3). Когда новый объект создается (и добавляется в массив), мне нужно получить доступ к этому объекту в следующем представлении. Раньше я просто передавал Объект следующему представлению, но это было грязно и казалось неправильным.

Так что теперь у меня есть все мои объекты в одном месте, но как я могу получить доступ к Объекту (который был только что создан) в следующем представлении, потому что я не знаю, к какому индексу он был добавлен? Нужно ли проверять счетчик массива каждый раз, когда я создаю объект, затем определять индекс массива из этого и передавать это значение индекса в следующее представление? Или есть способ извлечь объекты из массива NSMutable по какому-то уникальному имени?

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

Редактировать: Спасибо за ответ, я уточню, что я пытаюсь сделать. У меня есть NavigationController и каждому представлению, к которому вы обращаетесь, необходим доступ к объекту. Вы можете думать об этом как о книге. В первом просмотре вы выбираете книгу, которую хотите прочитать, а затем после каждого просмотра появляется страница из выбранной вами книги. А в App Delegate есть массив всех книг. Не могли бы вы пройти каждую «страницу» просмотра книги?

Имейте в виду, что это довольно грубый пример, потому что при выборе книги вы уже знаете индекс, по которому она была. Скажем, если вы создаете книгу, то вы еще не знаете, где в массиве она находится.

Ответы [ 2 ]

3 голосов
/ 19 марта 2009

Если вы можете создать значимое уникальное имя для каждого из этих объектов, просто используйте NSMutableDictionary и попросите контроллеры получить данные, указав ключ. Вот так:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSString *obj = [appDelegate.dict objectForKey:@"unique-name-here"];

Надеюсь, это поможет.

2 голосов
/ 19 марта 2009

Я не совсем уверен, говорите ли вы об обмене объектами между различными элементами управления, или если вы говорите о разных контроллерах представления - например, представлении master-detail, хотя я подозреваю, что это то, что вы имеете в виду.

В этом случае, если у вас есть подробный вид, предназначенный для редактирования одного объекта, то, по моему мнению, было бы неправильно назначать этому контроллеру представления объект для редактирования. Если вы поддерживаете массив, вы все равно можете добавить новый объект в массив и назначить объект новому контроллеру представления перед тем, как поместить его на экран.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...