UITableView IndexPathForCell возвращает ошибки - PullRequest
0 голосов
/ 07 июля 2011

В моем UITableView каждая ячейка имеет пользовательский переключатель UIS.Я сохраняю информацию о переключателе в NSMutableArray с намерением использовать его для сохранения информации о состоянии всякий раз, когда пользователь переходит на другую таблицу.

Для этого мне нужно получить информацию о строке ячейки, так что я могу перевернуть соответствующее «ДА» или «НЕТ» в NSMutableArray.Я пытаюсь сделать это так:

UICustomSwitch *temp = (UICustomSwitch *)sender;
UITableViewCell *cell =  (UITableViewCell *)temp.superview;
NSIndexPath *path = [self.tableView indexPathForCell:cell];

После этого у меня есть

NSLog(@"Path was: %@", path);

Теперь, когда я вывожу путь, я получаю что-то вроде:

Path was: <NSIndexPath 0x4b25590> 2 indexes [0, 1]

Однако, когда я изменяю NSlog на path.row, программа вылетает.Я не нашел причины для этого, и я использую path.row и в других местах.Может кто-нибудь помочь объяснить, почему это происходит?

Редактировать:

Например, когда я делаю это:

 NSLog(@"Path was: %d", path.row);

Вылетает.

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

NSIndexPath.row возвращает обычное целое число без знака (NSUInteger), а не объект, поэтому вам нужно изменить спецификатор формата NSLog с %@ на %u.Используя %@, он использует целое число в качестве адреса памяти, что весьма вероятно указывает на некоторую память, которая вообще не является объектом.

0 голосов
/ 08 июля 2011

Хм ... Я не уверен, что это считается ответом, но я перезагружал компьютер, и он снова начал работать.Так что ... Да, я действительно понятия не имею, что происходило в мире.

0 голосов
/ 07 июля 2011

Вы пробовали:

NSLog(@"Path was: %@", path.row);?path.row это тип NSUInteger.Вы можете использовать «% d» вместо «%@'.

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