#objective-c #xcode #uitableview
#objective-c #xcode #uitableview
Вопрос:
Я создаю Ipad с двумя контроллерами просмотра. Один контроллер представления является FirstViewController
, а другой — SecondViewController
. В FirstViewController
я заполняю массив числами. Теперь в моем SecondViewCOntroller
у меня есть табличное представление. Я хочу поместить массив, который я создал в FirstViewController
моем SecondViewController
табличном представлении? Как мне это сделать? Пожалуйста, помогите мне!
Ответ №1:
Вам нужно сослаться на объект NSArray во SecondViewController, вы могли бы сделать это с помощью делегата. Делегат — это переменная экземпляра, которая содержит указатель на делегат, в данном случае FirstViewController. Затем в FirstViewController вы добавляете свойство для NSArray, если это переменная экземпляра, и вызываете delegate.someArrayName во SecondViewController
Комментарии:
1. Итак, вы говорите, что в моем FirstViewController. У меня есть переменная, подобная этой: FirstViewController * firstViewVariable; затем добавьте свойство. Затем вызвать это во SecondViewController? Я немного запутался, это правильно?
2. @serge2487 да, мой ответ не очень прост, если вы делаете это в первый раз.. эй, ты знаешь, что такое делегат и как им пользоваться?
3. я использую методы делегирования и источника данных для моего tableview. Я знаю, как заполнить мою таблицу, но только если все это сделано в моем SecondViewController. Я так думаю, лол.
4. Ну, вы добавляете переменную во SecondViewController, которая содержит делегат .. «идентификатор делегата»; «@property (неатомный, назначить) идентификатор делегата»; в заголовке «@synthesize delegate» в исходном файле, а затем, когда вы создаете SecondViewController, вы делаете это: secondViewControllerVar.delegate = FirstViewController; и затем вы можете перейти оттуда, поскольку вы можете получить доступ к FirstViewController в SecondViewController
Ответ №2:
Этот подход нарушает MVC. У вас не может быть массива данных в качестве переменной экземпляра в вашем FirstViewController
. Вам пришлось бы хранить данные в каком-то другом классе (M-часть MVC). Вы заполняете эту M часть из FirstViewController
(V часть), а затем получаете доступ к этой заполненной M части из SecondViewController
. Таким образом, вы не будете зависеть от того, как эти два контроллера связаны друг с другом (родительский / дочерний, братья и сестры или любая другая иерархия, о которой вы можете подумать).
Самый простой подход, который я могу придумать, — это сохранение сериализованного массива в файле plist. Сохранение файла в первом и доступ к нему во втором контроллере представления.
Комментарии:
1. я понимаю. как бы сохранить это в plist. означает ли это, что массив не может измениться? Потому что я бы довольно часто менял его содержимое.
2. Вы можете изменить массив. Вы бы просто перезаписали содержимое plist. Для этого существуют удобные методы. Просто проверьте документацию.
Ответ №3:
Наиболее простым подходом будет создание свойства в SecondViewController.h, подобного:
@property (nonatomic, retain) NSMutableArray *yourArray;
и во SecondViewController.m поместите:
@synthesize yourArray;
На этом этапе вы создали свойство на SecondViewController. Теперь, когда вы собираетесь открыть второй контроллер представления, просто создайте его экземпляр и сделайте что-то вроде следующего:
secondViewController.yourArray = array;
[self.navigationController pushViewController:secondViewController];