Удаление представления из SuperView на iOS 4 SDK - PullRequest
0 голосов
/ 08 октября 2011

Я разрабатываю приложение для iPhone 3.1.3 с iOS 4 SDK.

У меня есть два ViewController, mainViewController и AboutViewController.

Я использую этот код для перехода от mainViewController к AboutViewController (код внутри mainViewController.m):

- (IBAction) aboutClicked:(id)sender
{
    AboutViewController* aboutController =
        [[AboutViewController alloc] 
         initWithNibName:@"AboutViewController"
                  bundle:nil];
    [self.view addSubview:aboutController.view];

    [aboutController release];    
}

И это возвращается из AboutViewController в mainViewController (код внутри AboutViewController.m):

- (IBAction) backClicked:(id) sender
{
    [self.view removeFromSuperview];
}

Когда я нажимаю кнопку «Назад» на AboutViewController, Я получаю EXC_BAD_ACCESS.

Я использую шаблон приложения на основе окна.

Я также пытался добавить точку останова в [self.view removeFromSuperview], но не могу.

Знаете почему?

Ответы [ 4 ]

1 голос
/ 08 октября 2011

Сделайте это вместо:

- (IBAction) aboutClicked:(id)sender
{
    AboutViewController* aboutController =
        [[AboutViewController alloc] 
         initWithNibName:@"AboutViewController"
                  bundle:nil];
    [self presentModalViewController:aboutController animated:YES];

    [aboutController release];    
}

И это, чтобы вернуться из AboutViewController в mainViewController (код внутри AboutViewController.m):

- (IBAction) backClicked:(id) sender
{
    [[self parentViewController] dismissModalViewControllerAnimated:YES]
}
0 голосов
/ 08 октября 2011

Причина, по которой вы получаете EXC_BAD_ACCESS, заключается в том, что после добавления представления viewController в качестве вспомогательного представления вы освободили контроллер, поэтому событие касания не смогло увидеть предназначенный viewController для его обработки.

закомментируйтезаявление о выпуске, как показано ниже, и оно должно работать

- (IBAction) aboutClicked:(id)sender
{
    AboutViewController* aboutController =
    [[AboutViewController alloc] 
     initWithNibName:@"AboutViewController"
              bundle:nil];
    [self.view addSubview:aboutController.view];

//[aboutController release]; To avoid leaking consider creating aboutController variable at instance level and releasing it in the dealloc.
}
0 голосов
/ 08 октября 2011

1) Сделать aboutController переменной уровня класса

2) Создайте метод делегата для обработки

(IBAction) backClicked:(id) sender

3) При реализации делегатского вызова

 [aboutController.view removeFromSuperView];
0 голосов
/ 08 октября 2011

Попробуйте:

[self presentModalViewController:aboutController animated:YES];

Для представления вида и:

[self dismissModalViewControllerAnimated:YES];

Чтобы удалить вид ...

...