isEqual не всегда работает для NSIndexPath?Что я могу использовать на его месте? - PullRequest
32 голосов
/ 25 сентября 2010

У меня есть некоторый код, который основывается на сравнении двух NSIndexPath и выполнении различного кода на основе их равенства или его отсутствия (с использованием -isEqual). Большую часть времени это работает должным образом, но иногда это не так. Я использовал консоль отладчика для тестирования двух путей к индексам во время выполнения кода, и они выглядят одинаково для меня.

Вот код:

- (BOOL)selectedStreetIsSameAsLastSelectedStreet
{
    return [self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet];
}

Вот вывод во время выполнения кода:

(gdb) po self.indexPathOfSelectedStreet
<NSIndexPath 0x60a0770> 2 indexes [26, 1]
(gdb) po self.previousObject.indexPathOfSelectedStreet
<NSIndexPath 0x55b4f70> 2 indexes [26, 1]
(gdb) p (BOOL)[self.indexPathOfSelectedStreet isEqual:self.previousObject.indexPathOfSelectedStreet]
$2 = 0 '\000'

Я что-то не так делаю или есть другой способ надежно проверить равенство двух NSIndexPaths?

1 Ответ

63 голосов
/ 25 сентября 2010

Начиная с iOS 5 вы можете просто использовать isEqual: (см. Комментарии)


Попробуйте [indexPath1 compare: indexPath2] == NSOrderedSame.

Возможно, вы нашли ошибку в NSIndexPath. Если вы попытаетесь создать новый NSIndexPath с уже существующим путем, вы должны получить его вместо этого. Так что isEqual:, вероятно, просто сравнивает указатели, а не фактические сохраненные индексы.

...