Когда представление закрывается, представляемое представление выдает EXC_BAD_ACCESS.

Я конвертирую свое приложение для iPhone в версию для iPad, создаю новые XIB для iPad и привязываю их к существующим целевым классам C, используя имя ~ipad XIB.

В версии для iPhone я использую навигационный контроллер, чтобы вернуться к приложению. Это должно отлично работать и на iPad, но хотя навигационный контроллер появляется, он не отвечает. На самом деле он невидим для любого взаимодействия, если за навигационным контроллером есть карта, и вы дважды щелкаете назад, вы просто увеличиваете масштаб карты, где вы щелкнули.

Поэтому я включаю кнопку в вид iPad, которая должна делать то же самое. В прессе я звоню

[[self navigationController] popViewControllerAnimated: YES];

Когда я вызываю это, я получаю EXC_BAD_ACCESS. Я вошел в жуткий режим зомби, который дает мне это

*** -[UIWindowLayer superlayer]: message sent to deallocated instance 0x83bb9f0

Я определил, что 0x83bb9f0 представляет слои self.view.layer

Я использую ARC для обработки своих распределений и операций.

ВОПРОС: как я могу предотвратить освобождение self.view.layer? или как я могу снова выделить его в нужное время, чтобы не получить эту ошибку?

Я могу предоставить больше кода, если это необходимо. Спасибо большое!!

Редактировать: здесь создается главная страница (целевая страница) и навигационный контроллер.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    landingPage *LandingPage = [[landingPage alloc] initWithNibName:@"landingPage" bundle:nil];

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:LandingPage];
    self.window.rootViewController = self.navigationController;
   // [self.navigationController pushViewController:LandingPage animated:YES];

   [self.window makeKeyAndVisible];
    return YES;

Тогда вот где вызывается внутренний вид:

mapView *MapView = nil;
        MapView =[[mapView alloc] initWithNibName:@"mapView" bundle:nil];
        [self.navigationController pushViewController:MapView animated:YES];

person Jim Hall    schedule 09.03.2012    source источник
comment
mapView *MapView = nil; Боже! Вы поняли это неправильно. Только классы (например, NSString, UIWindow) должны начинаться с заглавных букв. И почему подкласс UIView_Controller_ называется Map_View_? Запутанно, черт возьми.   -  person Matthias Bauch    schedule 09.03.2012
comment
проверьте, является ли ваш класс MapViewController делегатом любого другого класса. Скорее всего, что-то вызывает метод делегата, когда mapViewController был извлечен и освобожден. Может быть, MKMapViewDelegate?   -  person Matthias Bauch    schedule 10.03.2012
comment
Да, я знаю, просто трудно избавиться от привычки. Обещаю стараться больше! Но я решил это, см. Ниже (примерно 5 минут)   -  person Jim Hall    schedule 10.03.2012
comment
Ну, я пока не могу ответить на свой вопрос, так что: хорошо, я понял! XIB, которые я создавал для версии для iPad, были окнами, а не представлениями. Я воссоздал все это в виде представлений и смонтировал их, и это сработало просто отлично!   -  person Jim Hall    schedule 10.03.2012


Ответы (1)


Так что я понял!

XIB, которые я создавал для версии для iPad, были окнами, а не представлениями. Я воссоздал все это в виде представлений и смонтировал их, и это сработало просто отлично!

person Jim Hall    schedule 12.03.2012