Похоже, вы не выполняете следующую проверку, которую вам нужно сделать перед использованием addRefOrder.
if (addedRefOrder == NSNotFound) {
NSLog(@"Object %@ not found in array %@", addedRef, array);
}
Если это NSNotFound, то это не мусорное значение, и я бы не стал подвергать сомнению этот результат и не вызывал бы отладчик, прежде чем искать в другом месте кода. Что заставляет вас думать, что это неправильно? Обычно это наша вина. Возможно, вы упустили из виду некоторую проблему с вашей логикой, выходящую за рамки этого фрагмента кода.
Если вышеприведенное верно, сделайте обзор своего кода, чтобы выяснить, почему его не будет в массиве.
Одна вещь, которую нужно проверить, это ваша реализация isEqual: для класса объекта AddedRef. Потому что именно так массив определяет, находится объект в массиве или нет.
Также я бы не стал доверять результату первой строки в отладчике. Вы только что вызвали все эти методы во второй раз, и в этих вызовах может произойти все, что может повлиять на возвращаемое значение. Возможно, во второй раз, когда вы вызываете его, он на самом деле находится в массиве из-за некоторого побочного эффекта.
Это также может быть проблема параллелизма, которую вы легко сможете исключить, если не используете потоки. Если да, то я бы посмотрел на обычных подозреваемых.