2009-06-28 2 views
0

У меня есть экземпляр UIViewController, отображающий список элементов. Когда пользователь выбирает элемент, мне нужно создать новый экземпляр UIViewController (заполненный другим списком элементов) и показать его. На данный момент я звоню конструктор внутри метода didSelectRowAtIndexPathСоздайте экземпляр UIViewController внутри себя

RootViewController *rootViewController = [[RootViewController alloc]initWithStyle:UITableViewStylePlain]; 
UIViewController *targetViewController = rootViewController; 
[[self navigationController] pushViewController:targetViewController animated:NO]; 

Но вместо создания нового объекта он повторно использует текущие один: новый вид содержит элементы из нового списка, а также от предыдущего список. Итак, как мне создать новый экземпляр RootViewController изнутри самого себя?

ответ

0

Вы создаете и представляете новый контроллер представлений, ваша проблема в другом месте.

Где вы храните данные для таблицы?

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

+0

Данные представляют собой XML-файл. Я вызываю метод для разбора xml и заполнения списка. В зависимости от значения аргументов я загружаю разные списки xml. Но старые остаются ... хм ... – Pavel

0

Действительно неопределенно:

1) Импорт файла 2-го уровня заголовка в этом файле реализации. Еще на 2-м уровне есть геттеры/сеттеры. На вашем первом уровне добавьте другой метод, - (BOOL) set2ndLevelDataBasedOnXMLSource: (id) источник в этом методе задает соответствующие переменные экземпляра и выполняет вычисления для установки данных.

2) Ваш код в didSelectRow должен выглядеть следующим образом:

if(!rootViewController) { 
RootView *rootViewController = [[RootView alloc] initWithstyel...]; } 

BOOL result = [self set2ndLevelDataBasedOnXMLSource:_Source_]; 

if(result) { 
[[self navigationController] pushViewController:targetViewController animated:NO]; } 

Тогда вы могли бы реорганизовать его:

if([self set2ndLevelDataBasedOnXMLSource:_Source_]) { 
[[self navigationController] pushViewController:targetViewController animated:NO]; } 

3) в - (BOOL) set2ndLevelDataBasedOnXMLSource: (ID) источник {

У меня есть:

NSUInteger result; 
if(source == true) { 

2ndLevelController.section1data = [source (parse for)...]; 

2ndLevelController.section2data = [source (parse for ...)]; 

... 

result = 1; } 
else { result = 0; } 

return result; 

4) на моем 2-м уровне, в представленииWillDisappear, я установил все эти переменные экземпляра равными нулю (они являются изменяемыми массивами)

Вот как я это сделал.

Смежные вопросы