Подтвердить что ты не робот

IsEqual не всегда работает для NSIndexPath? Что я могу использовать на своем месте?

У меня есть код, который полагается на сравнение двух NSIndexPaths и выполнение другого кода на основе их равенства или отсутствия (с использованием -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?

4b9b3361

Ответ 1

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


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

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