2010-09-10 3 views
0

Возможно, я слишком долго смотрел на это;) Мое приложение имеет NavigationController и несколько ViewControllers. Из одного из ViewControllers на два уровня вниз (mainViewController), загруженного из rootViewController, у меня есть код ниже. После PushViewController на dataViewController и обратно (например, нажата кнопка «Назад») приложение выйдет из строя.Strange Exc Bad Access при использовании Init, PushViewController, Release. Что-то не так с этим кодом?

DataViewController загружается просто отлично, но при нажатии кнопки «Назад» навигационного контроллера происходит сбой приложения с «Исключение объекта». Если я удалю:

[dataViewController release]; 

приложение работает нормально. Это странно, потому что dataViewController инициализирован одним и тем же методом. Любые идеи?

- (void) locationPage 
{ 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyRemoveMap" object:nil]; 
    MyAppDelegate *app = [[UIApplication sharedApplication] delegate]; 

    UINavigationController *navigation = app.navigationCantroller; 
    [navigation popToRootViewControllerAnimated:NO]; 

    DataViewController *dataViewController = [[DataViewController alloc] initWithNibName:@"DataView" bundle:nil]; 
    [dataViewController setCategoryId:category]; 

    MyLanguage *lang = app.lang; 
    Mylocation *location = [lang locationForCategoryId:category]; 

    dataViewController.title = location.name; 
    NSArray *locationArray = [lang locations]; 

    dataViewController.locations = locationArray; 
    [navigation pushViewController:dataViewController animated:YES]; 
    [dataViewController release]; // With this removed, app doesn't crash 
} 

ответ

2

Даже не прочитал ваше сообщение. Если это Exec-Bad-Access, у меня есть 2 слова для вас:

Включить NSZombies.

Перейдите по этой ссылке: (это объясняет все, что вам нужно знать, чтобы исправить любой плохой вопрос доступа)

Phone Memory Debug with NSZombie and Instruments

Ура!

+0

BINGO! Lupu1001, ваш ответ спас мне жизнь! ;) Я ЛЮБЛЮ ТЕБЯ ЧУВАК!!! – Jordan

+0

Рад, что я мог помочь. Увидимся. –

1

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

Вы можете отредактировать свой вопрос, чтобы показать код, который запускается с помощью кнопки «Назад».

+0

Ничто не ведет на консоль. Просто тяжело падает. Xcode 3.2.3, 3.2.4, iOS 3.1. Переход через отладчик ничего не раскрывает. Интересный комментарий, но я понимаю, что pushViewController сохраняет dataViewController до тех пор, пока не будет нажата кнопка «Назад». – Jordan

+0

Он сохраняет, но второй он появляется, и он выпущен. Поэтому, когда вы хотите прочитать некоторые данные из этого, вы лучше сохранили его раньше. – Eiko

0

Вы говорите о выпуске dataViewController, но ваш код говорит detailsViewController. Вы копировали и вставляли неправильно или это ошибка?

Вы должны не использовать app.navigationController, но self.navigationController. Более чистый дизайн. Меньше зависимостей от делегата приложения, который слишком часто используется как frankensteinobject, который слишком много знает.

+0

отредактирован: должен быть dataViewController. Благодарю. Еще проблема. – Jordan

+0

Когда я использую self.navigationController, PushViewController не загружается. Просто идет к корню - [navigation popToRootViewControllerAnimated: NO]; – Jordan

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

  • Нет связанных вопросов^_^