Существует два метода обработки данных между несколькими контроллерами представления.
Во-первых, существует внедрение зависимостей , которое просто передает ссылку на объект хранения данных между контроллерами.Поскольку объекты передаются по ссылке, вы можете изменить объект данных в одной руке контроллера, если данные появятся в другой.
В вашем случае ваш объект данных - это просто изменяемый массив.Вы должны определить свойство для хранения массива в каждом контроллере представления, который будет его использовать.Таким образом, в вашем RootViewController
вы должны определить свойство NSMutableArray, создать пустой массив и затем передать его следующему контроллеру представления при загрузке.
QueryTableViewController *queryTableView
= [[QueryTableViewController alloc] initWithQuery:query];
queryTableView.results=self.queryResults;
[self.navigationController pushViewController:queryTableView animated:YES];
[queryTableView release];
Поскольку экземпляр RootViewController
и экземпляр QueryTableViewController
совместно используют ссылку на один и тот же изменяемый массив, каждый из которых является доступом к изменениям, внесенным другим.
Внедрение зависимостей обладает преимуществом простоты.Однако он имеет недостаток, заключающийся в том, что все контроллеры представления доступа к данным связываются в жесткую иерархию.Если вы перемещаете контроллеры представлений в иерархии представлений, добавляете или удаляете контроллеры представлений или перемещаете контроллер представлений в другое приложение, вам, возможно, придется переписать обработку данных для всех представлений.
Второй метод использует псевдо-синглтон, чтобы сделать объект данных доступным в любом месте приложения.Приложение представляет собой одноэлементное приложение, так что оно фактически делает делегат приложения одноэлементным.
Чтобы получить делегирование приложения в любом месте приложения:
AppDelegateClassName *appDelegate=(AppDelegateClassName *)[[NSApplication sharedApplication] delegate];
... затем, чтобы обратиться к любому свойствуделегата приложения:
NSMutableArray *localResults=appDelegate.results;
Преимущество этой системы в том, что она делает контроллеры представления независимыми друг от друга.Вы можете легко перемещать их или даже перемещать в другое приложение.