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
не работают.