NSIndexPath не распознает элемент, раздел или строку как свойства

Когда iOS 7.1 отправляет мой viewController:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
    cellForItemAtIndexPath:(NSIndexPath *)indexPath

Объект indexPath не распознает свойства: элемент, раздел или строку. Ожидаемые значения: section = 0, item = 0

Отладчик показывает:

**indexPath NSIndexPath *   0xc000000000000016

 NSObject       
_indexes    NSUInteger *    NULL    
  *_indexes     
_length     
_reserved   void *  NULL

Отчет журнала:

(lldb) po indexPath
<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}
(lldb) po indexPath.item
error: property 'item' not found on object of type 'NSIndexPath *'
error: 1 errors parsing expression
(lldb) po indexPath.row
error: property 'row' not found on object of type 'NSIndexPath *'
error: 1 errors parsing expression
(lldb) po indexPath.section
error: property 'section' not found on object of type 'NSIndexPath *'
error: 1 errors parsing expression****

Любые идеи, почему это происходит и что с этим делать?

Ответ 1

Не используйте синтаксис точки доступа/сеттера, используйте скобки:

  • po [index row]
  • po [index section]

ИЗМЕНИТЬ

Наложение Swift в структуру Foundation предоставляет структуру IndexPath, которая соединяется с классом NSIndexPath. Тип значения IndexPath предлагает ту же функциональность, что и ссылочный тип NSIndexPath, и эти два могут быть взаимозаменяемы в коде Swift, который взаимодействует с API Objective-C. Это поведение похоже на то, как Swift соединяет стандартные строковые, числовые и типы коллекций с соответствующими классами Foundation.

  • po index.row
  • po index.section

работает как ожидалось. Комментарий к p vs. po сохраняется.

Стоит отметить, что вы можете использовать IndexPath в Swift вместо NSIndexPath, как описано в Документация Apple.

Ответ 2

Вы можете попробовать это, он отлично работает для меня:

po (int)[indexPath row]

Ответ 3

Почему вы используете po? Результирующая строка и секция NSIndexPath - это ints, а не объекты.

Используйте p вместо po.

p [indexPath section]

p [indexPath row]

p indexPath.section

p indexPath.row

Я делаю ту же ошибку все время.

Примечание.. Если вы используете UIViewController и расширяете его, чтобы иметь делегат UITableViewController и источник данных, обязательно импортируйте UITableView.h в свой файл заголовка.

Этот файл добавляет расширения в NSIndexPath, чтобы вы могли использовать строку и раздел. Если вы не импортируете файл, который их объявляет, вы сойдете с ума, если не будете знать, почему indexpath.row и indexpath.section не работают.