Доступ nsindexpath к свойству строки в раздел вызывает SIGABRT? - PullRequest
2 голосов
/ 05 декабря 2011

Ориентация на iOS 5.0 Я вижу SIGABRT, когда пытаюсь получить доступ к свойствам строки или раздела объекта NSIndexPath в следующем коде:

NSIndexPath* path = [[NSIndexPath alloc] initWithIndex:0];
int row = path.row; //SIGABRT
int section = path.section;//SIGABRT

В этом примере предлагается использовать indexPathWithIndex: вместо http://developer.apple.com/library/mac/#samplecode/SourceView/Listings/BaseNode_m.html#//apple_ref/doc/uid/DTS10004441-BaseNode_m-DontLinkElementID_6

path = [NSIndexPath indexPathWithIndex:0];

Результаты остаются неизменными.У кого-нибудь есть объяснение, почему это может произойти?Неужели мы просто не можем работать с NSIndexPath в iOS 5.0?

Спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Попробуйте создать путь индекса, используя indexPathForRow:inSection:

NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0];
2 голосов
/ 05 декабря 2011

Единственное, о чем я могу думать, - это убедиться, что UIKit.framework является одной из ваших платформ. Вы можете сделать это, нажав кнопку «плюс» в разделе «Связать двоичные файлы с библиотеками» в разделе «Этапы сборки» на своей цели. Также убедитесь, что вы импортируете NSIndexPath.h в файл, из которого пытаетесь получить доступ к пути индекса.

Я сталкивался с этой проблемой раньше, и это решило ее. Это потому, что хотя NSIndexPath является универсальным между Cocoa и CocoaTouch, версия Cocoa не имеет свойств row и section.

Если у вас уже есть UIKit.framework, попробуйте использовать [NSIndexPath indexPathForRow:row inSection:section] вместо [NSIndexPath indexPathWithIndex:index].

0 голосов
/ 05 декабря 2011

Мне кажется, проблема в том, что indexPathWithIndex: создает путь индекса из одного узла.То же самое для initWithIndex :.Свойства раздела и строки поступают из категории UITableView в класс NSIndexPath.Путь индекса с одним узлом недопустим для использования с табличным представлением, потому что пути индекса, передаваемые к табличным представлениям, должны содержать два индекса, указывающих раздел и строку (согласно сообщению об ошибке, которое я получаю, когда запускаю ваш код).Следующий код создает путь индекса с двумя индексами и выполняется без выброса NSInternalInconsistencyException:

NSUInteger x[] = {0 , 0};
NSIndexPath *path = [[NSIndexPath alloc] initWithIndexes: x length: 2];
int row = [path row];
int section = [path section];
row = path.row;
section = path.section;

Это то, что вы имели в виду под «оперировать NSIndexPath в iOS 5.0»?

...