обновление табличного представления данными в массиве?

#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];