Перезапуск оператора if или метода? - PullRequest
0 голосов
/ 03 сентября 2011

Я реализую UITableView и у меня реализован метод - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath, и в этом методе у меня есть циклы if (ниже):

NSInteger row = [indexPath row];

if (self.someDetailViewController == nil) {
    if (row==0) {
        OneTableViewController *aDetail = [[OneTableViewController alloc] initWithNibName:@"OneDetail" bundle:nil];
        self.oneDetailViewController = aDetail;
        [aDetail release];
    } else if (row==1) {
        OneTableViewController *aDetail = [[OneTableViewController alloc] initWithNibName:@"TwoDetail" bundle:nil];
        self.oneDetailViewController = aDetail;
        [aDetail release];
    }
}

Однако каждый раз, когда я выбираю что-то в своем табличном представлении (давайтескажем, строка 0) меня переводят во вторичный вид (OneDetail), а затем, когда я возвращаюсь и выбираю другую строку (ряд 1), и я ожидаю перейти к другому виду (TwoDetail) однако меня берутк OneDetail (к исходной строке, которая была выбрана первой) - как это может быть, когда пользователь касается другой строки, они переносятся во вторичный вид первой строки, который был первоначально нажат.Это также происходит наоборот (то есть, выбирая строку 1 и переводя ее в TwoDetail, а затем возвращаясь назад и выбирая строку 0, а также переводя в TwoDetail not OneDetail ...

Мне было интересно,Кто-нибудь знал, как «перезапустить» цикл if, когда пользователь нажимает кнопку «Назад», или как другим способом решить мою проблему. Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

Я подозреваю, что во второй раз, когда вы вводите метод, эта проверка возвращает false:

if (self.someDetailViewController == nil)

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

0 голосов
/ 03 сентября 2011

Это не петля.

Контроллер подробного просмотра хранится в переменной экземпляра oneDetailViewController.

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

Контроллер представления, который инициализируется с помощью "oneDetail".

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

self.someDetailViewController = nil;

дальше в методе.

Почему ты все равно делаешь это == ноль? Для чего нужен контроллер детального просмотра при дальнейшей обработке? Просто отпустите его в конце didSelectRowAtIndexPath и создайте новый при следующем запуске. Нет необходимости в переменной экземпляра, сохраняющей его.

Однако, если у вас есть веские причины для этого необычного фрагмента кода, которым вы не поделились с нами, то мы, безусловно, могли бы предложить, как этого добиться - если вы сообщите нам об этом :)

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