Цель C - indexOfObject NSArray: не работает - PullRequest
0 голосов
/ 26 июня 2018

Я использую [items indexOfObject:items.lastObject], чтобы получить последний индекс, но этот код возвращает nil.Почему это происходит?

enter image description here

1 Ответ

0 голосов
/ 26 июня 2018

Первый и последний объекты в вашем массиве - это элементы кнопок панели, созданные с помощью системного элемента «фиксированный пробел».

Результат вызова indexOfObject: равен 0, а не nil.Это означает, что объект находится по индексу 0.indexOfObject: не может вернуться nil.Если объект не найден, он возвращает специальное значение NSNotFound, которое является значением без знака для -1.

Из документации для indexOfObject::

Запускпри индексе 0 каждый элемент массива передается в качестве аргумента в сообщение isEqual:, отправляемое anObject, до тех пор, пока не будет найдено совпадение или не будет достигнут конец массива.Объекты считаются равными, если isEqual: (объявлено в протоколе NSObject) возвращает YES.

Реализация UIBarButtonItem isEqual: вернет YES, если созданы два экземпляра элемента кнопки панелис тем же системным элементом (и, возможно, с некоторыми другими свойствами).

indexOfObject: не основан на экземпляре объекта, он основан на isEqual:.

Если выЕсли вы хотите найти индекс объекта на основе идентификатора (его адреса) объекта вместо isEqual:, используйте indexOfObjectIdenticalTo:.

p [items indexOfObjectIdenticalTo:items.lastObject]

, чтобы получить 6 вместо 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...