Проблема с контроллером iPhone и навигацией - PullRequest
0 голосов
/ 24 января 2011

У меня 2 просмотра;Вид A - показывает списки таблиц - Строка a, Строка b, c ... (фактически заполненная из запроса ext API). Вид B - показывает подробности о выбранной строке

Теперь, скажем, когда я нажимаю на строкув представлении A в первый раз он переводит меня в подробный вид (т.е. вид B).После этого я возвращаюсь к просмотру A. Теперь, когда я нажимаю на любую строку a / b, это дает мне ошибку;Программа получила сигнал: “EXC_BAD_ACCESS”.

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

Мой код:

bookdetailViewController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]];

Пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 27 января 2011

Чтобы дать вам лучший ответ, необходимо посмотреть, что в ваших viewDidLoad:, viewWillAppear: и, вероятно, tableView:didSelectRowAtIndexPath: методах.

С этой строкой:

bookdetailViewController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]];

вы инициализируете (и, следовательно, сохраняете) экземпляр BookDetailViewController.Кто занимается выпуском этого, когда вы вернетесь к представлению A (которое, как я полагаю, называется BookListViewController или BooksViewController).Если никто не ответственен за то, что выпустил сообщение об утечке, это может не вызвать EXC_BAD_ACCESS, но это не хорошо.

0 голосов
/ 05 февраля 2011

Есть хорошая вероятность, что вы не всегда можете повторить это из-за времени.Вы сказали, что экраны заполняются внешним запросом API.Вы задаете подробный вид в качестве делегата для запроса API, чтобы он получал уведомление, когда запрос API завершен и данные готовы?

Я предлагаю вам воспроизвести ошибку, очень быстро перейдя изот представления списка к представлению сведений, но прежде чем представление сведений сможет загрузить свои данные, вернитесь к представлению списка.Если представление сведений является делегатом для запроса API, приложение будет аварийно завершено, поскольку делегат для запроса API был освобожден до того, как он сможет вызвать любое указанное вами сообщение делегата.Если вы дадите время просмотра подробных данных для загрузки данных, вы не столкнетесь с этим сбоем.

У меня есть похожая ошибка в приложении, над которым я работаю, и в настоящее время я ее избегаю с небольшимхак - в подробном представлении dealloc:

-(void)dealloc
{
  [super dealloc];
  self = nil;
}

Если у кого-нибудь есть более умный способ убедиться, что для освобождаемого представления установлено значение nil, я приветствую их предложение.

0 голосов
/ 24 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...