Как отклонить коллекцию объектов UIViewController, которые были загружены динамически в Xcode 4 - PullRequest
0 голосов
/ 17 февраля 2012

У меня возникли проблемы с удалением коллекции объектов UIViewController.Я не знаю элегантного способа одновременного закрытия всех загруженных модальных объектов UIViewController.

Я использую «раскадровку» в Xcode 4, , но я не использую Segues для сопоставления экранов. Я использую динамический код, например так:

Все начинается в MainViewController.m.Я загружаю [myMenuController] (список меню).Когда пользователь выбирает параметр из меню, он загружает [myTicketController].После некоторого взаимодействия с пользователем он загружает [myNextController], и вы видите шаблон.Я загружаю несколько UIViewControllers динамически (здесь нет переходов):

//from MainViewController.m - Load the main menu
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myMenuController = (MyMenuController *)[storyboard instantiateViewControllerWithIdentifier:@"MyMenuController"];
myMenuController.settingsModel = settingsModel;
myMenuController.ticketStatusHandler = data;
myMenuController.rootDataModel = dataModel;
[myMenuController setModalPresentationStyle:UIModalPresentationFullScreen];    
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:myMenuController animated:YES];


///////////////////////////////////////////////////////////////////////////


//from MyMenuController.m - Load the add ticket menu
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myTicketController = (MyTicketController *)[storyboard instantiateViewControllerWithIdentifier:@"MyTicketController"];
myTicketController.settingsModel = settingsModel;
myTicketController.ticketStatusHandler = data;
myTicketController.rootDataModel = dataModel;
[myTicketController setModalPresentationStyle:UIModalPresentationFullScreen];    
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:myTicketController animated:YES];


///////////////////////////////////////////////////////////////////////////////

//from MyTicketController.m - Load the next screen
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myNextController = (MyNextController *)[storyboard instantiateViewControllerWithIdentifier:@"MyNextController"];
myNextController.settingsModel = settingsModel;
myNextController.rootDataModel = dataModel;
[myNextController setModalPresentationStyle:UIModalPresentationFullScreen];    
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController: myNextController animated:YES];

Итак, я дошел до конца приложения и загрузил еще несколько UIViewControllers.Допустим, я загружаю еще 4 или 5 UIViewControllers после того, как [myNextController] был загружен.

Есть ли общий способ выгрузить все UIViewController, находящиеся в памяти, и просто перезагрузить [myMenuController]?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Если вы хотите, чтобы они были «выгружены» (я полагаю, вы имеете в виду освобождение), вам просто нужно убедиться, что на них нет ссылок. Таким образом, вам нужно отменить их (что вы, кажется, уже делаете), и вам необходимо сбросить все переменные, которые ссылаются на них, например, в MyMenuController вам нужно сделать это, когда вы закончите с myTicketController:

[myTicketController release]; // if not using ARC
myTicketController = nil;  // if using ARC
1 голос
/ 17 февраля 2012

хорошо, вы можете, например, определить глобальный массив в делегате приложения и вставить в него контроллеры представления ... как только вы захотите закрыть все контроллеры представления, создайте цикл for, который отклонит все объекты внутри него (контроллер представления),Также вы можете вставить viewcontroller в специальный индекс, если вы хотите загрузить его, например,

  1. Чтобы вставить [appDelegate.controllersArr insertObject:self atIndex:0];

  2. Чтобы выгрузить всеview Controllers

        for(int i=0;i<[appDelegate.controllersArr count];i++)
    {           
        [[appDelegate.controllersArr objectAtIndex:i] dismissModalViewControllerAnimated:NO];
    }
    

Я надеюсь, что это будет полезно .. удачи.

...