Я пытаюсь отфильтровать массив пользовательских объектов на основе свойства этих объектов name
.NSArray filterArrayUsingPredicate никогда не возвращающее/блокирующее выполнение
Чтобы убедиться, что все работает, я просто использовал это, которое должно совпадать с точно 1 элемент в массиве:
NSLog(@"Length before %lu", (unsigned long) [self.mutableAvailableSources count]);
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name == CNN)"];
[self.mutableAvailableSources filterUsingPredicate:predicate];
NSLog(@"Length after %lu", (unsigned long) [self.mutableAvailableSources count]);
Это должно войти
Length before 9
Length after 1
Однако, он записывает только
Length before 9
И затем он прекращает выполнение. Ничто не проходит после фильтрации строки. Я попытался поставить точку останова на второй NSLog(..);
, но он так и не дошел. Если я помещаю точку останова в строку, фильтрующую массив, она останавливается, и я могу подтвердить, что существуют как массив, так и предикат.
Что здесь происходит?
Это, кстати, происходит в асинхронном блоке, поэтому приложение никогда не зависает. Но остальная часть кода в блоке не выполняется.
Возможно ли, что содержащий объект будет уничтожен до завершения блока? – Paulw11
Нет, это общий объект (экземпляр singleton), поэтому он не должен быть освобожден (/ уничтожен). Если я удалю строку, которая фильтрует массив, все остальное отлично работает - оно продолжает выполняться до конца блока. Итак, есть что-то о линии, которая фильтрует массив. – Aleksander
У вас есть опечатка в вашем вопросе? Если это 'filterUsingPredicate', а не' filterArrayUsingPredicate', если вы не можете показать источник для 'filterArrayUsingPredicate'. Примечание. 'NSMutableArray' не является потокобезопасным, поэтому вы не должны манипулировать им в нескольких потоках, по крайней мере,' @ synchronized' – Paulw11