indexPath null в didSelectRowAtIndexPath в приложении навигации ipad с разделенным видом - PullRequest
0 голосов
/ 01 марта 2011

Я портирую довольно простое приложение для iPhone с навигацией в приложение Split View для iPad.
У меня есть два вложенных уровня навигации в главном представлении. Пользователь выбирает значение из первой таблицы и загружает 2-ую таблицу. Выбор значения во второй таблице загружает элемент Detail для подробного представления. Или это должно быть. DidSelectRowAtIndexPath на моем втором контроллере срабатывает, но indexPath имеет значение null.

Я довольно близко следую шаблону SplitView. Я действительно только схожу с проторенной дорожки, добавив второй 2nd TableViewController. Мой RootViewController загружает 2-й TableViewController на didSelectRowAtIndexPath, и эта часть работает. В моем втором TableViewController.m я пытаюсь установить элемент детализации для DetailView. Но именно метод didSelectRowAtIndexPath не дает мне строки. Я довольно новичок в этом, но мне кажется странным, что метод щелчка по строке срабатывает, но не имеет индекса для этой строки.

Вот код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate];
    detailViewController.thisRequest = [appDelegate.requests objectAtIndex:indexPath.row];
    NSLog(@"Request Loaded: %@", detailViewController.thisRequest.Title);
    NSLog(@"Index Row: %@", indexPath.row);
    [appDelegate release];

}

Массив запросов загружается правильно (appDelegate.requests), но мой objectAtIndex не выполняется, поскольку indexPath имеет значение null. Или, по крайней мере, indexPath.row имеет значение null.

РЕДАКТИРОВАТЬ: Хорошо, комментарии ниже верны, я не использую NSLog должным образом. С indexPath.row все в порядке (я думал, что он также показывался как нулевой с использованием наведения мыши в отладчике, но я просто не знаю, как правильно использовать отладчик).

По какой-то причине свойство detailViewController неправильно настроено. Если я подставлю это:

//detailViewController.thisRequest = [appDelegate.requests objectAtIndex:indexPath.row];
Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row];

Объект aRequest загружается просто отлично. Поэтому следующий вопрос заключается в том, почему установка моего свойства для моего объекта detailViewController не работает. Я до сих пор не совсем понимаю, как обстоят дела в этой среде. Любой дополнительный вклад будет здорово.

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Значение indexPath.row не является строкой.Вы не можете войти в систему с %@.Попробуйте использовать %i или %li, которые используются для целых чисел.Кроме того, вы не правильно проверили наличие запроса на загрузку, аааик.Свойство title доступно только после успешной загрузки?

1 голос
/ 01 марта 2011

NSLog (@ "Строка индекса:% @", indexPath.row);

indexPath - это объект NSIndexPath, вы можете использовать% @ для его печати. ​​
Но indexPath.row и indexPath.section являются NSUInteger. Поэтому вы должны использовать% u, чтобы распечатать их.

Так что, возможно, ваш indexpath.row не ноль (как у объекта), а 0 (как ноль, число перед единицей)


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

...