Фильтрация по свойствам объектов в массиве с предикатом - PullRequest
1 голос
/ 06 декабря 2010

У меня есть массив объектов, которые я хотел бы отфильтровать с помощью предиката, но я не смог выяснить синтаксис (или это невозможно).

Скажем, объект location и имеет свойства широта и долгота . У меня есть массив из них, который называется allLocations , и я хочу создать новый массив местоположений, где свойство широты больше 30.

При извлечении управляемых объектов вы можете просто использовать имя свойства, но не так с массивами:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude > 30.0"];

не возвращает совпадений (несмотря на наличие большого количества объектов местоположения с широтами> 30,0.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.latitude > 30.0"];

тоже не годится, а

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[SELF latitude] > 30.0"];

и

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[location latitude] > 30.0"];

выбросить исключения.

Мне не повезло?

1 Ответ

2 голосов
/ 06 декабря 2010

То, что вы ищете, это filteredArrayUsingPredicate: метод NSArray.Ваша первая попытка предиката, описанная выше, будет работать нормально, когда вы передадите ее этому методу.

Стоит отметить, что NSMutableArray использует другой метод для достижения аналогичного эффекта, filterUsingPredicate:.Версия MutableArray изменяет приемник, тогда как версия Array возвращает новый массив.

Ссылка:
Ссылка на класс NSArray
Ссылка на класс NSMutableArray

...