Программирование iPhone - Передача NSMutableArray между контроллерами представления - PullRequest
3 голосов
/ 15 ноября 2011

У меня есть RootViewController и DetailViewController, где я пытаюсь передать NSMutableArray из rootView в detailView. Я создал объект RootViewController внутри DetailViewController и получил к нему доступ, как показано ниже

RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

detailViewArray = [root.rootViewArray copy];

Примечание. Оба массива объявлены в файлах .h; синтезируется, а затем выделяется и инициализируется array = [[NSMutableArray alloc] init];

Проблема : Я не слишком уверен, почему это все еще не работает. Я перепробовал множество решений в интернете, но у меня это не получилось. Свойство для корневого массива неатомное, оставьте Что-то не так с этим? Нужно ли мне что-то менять или метод, которым я следую, просто не верен? Пожалуйста, если кто-то может помочь!

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Если вы выделяете / инициируете RootViewController внутри DetailViewController, вы создаете другой экземпляр RootViewController. Вы не получаете тот же экземпляр (с данными) rootViewController.

Тем не менее, даже передача ссылки viewController другому viewController для последующего использования его данных - это плохо. Это создает тесную связь между видами.

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

Что конкретно делает делегат в проекте xcode ios?

Учебник

http://www.theappcodeblog.com/2011/04/15/passing-data-between-views-tutorial-using-a-protocol-delegate-in-your-iphone-app/

Другим вариантом является создание общей модели (ознакомьтесь с шаблонами контроллера представления модели). Для этого шаблона характерно создание модели и обмен данными путем получения одноэлементного экземпляра вашей модели:

MyModel *model = [MyModel sharedInstance];

Затем каждое представление может устанавливать и считывать данные из того же (одноэлементного) экземпляра модели.

Какой выбрать? Модель лучше, если многие представления используют одни и те же данные. Делегат подходит для пары представлений, чтобы общаться с каждым через обратные вызовы.

0 голосов
/ 15 ноября 2011

Даже существует другой способ передачи массива.

MyViewController mvc = [[MYViewController alloc] initWithNibName:@"MYViewController" bundle:[NSBundle mainBundler]];

[mvc getDataArray:<pass your array>];

[self.navigationController pushViewController:mvc animated:YES];

Здесь он сначала устанавливает свойство dataArray , а затем переводит контроллер представления в класс MyViewController.

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

...