Странный Exc Bad Access при использовании Init, PushViewController, Release.Что-то не так с этим кодом? - PullRequest
0 голосов
/ 11 сентября 2010

Может быть, я смотрю на это слишком долго;) В моем приложении есть NavigationController и несколько ViewController.От одного из ViewController вниз на два уровня (mainViewController), загруженного из rootViewController, у меня есть код ниже.После PushViewController к dataViewController и обратно (например, нажата кнопка «Назад») происходит сбой приложения.

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
}

Ответы [ 3 ]

2 голосов
/ 11 сентября 2010

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

Включить NSZombies.

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

Отладка памяти телефона с помощью NSZombie и инструментов

Приветствия!

1 голос
/ 11 сентября 2010

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

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

0 голосов
/ 11 сентября 2010

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

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

...