Отдельный объект с использованием NSPredicate - PullRequest
0 голосов
/ 03 января 2012

У меня есть NSArray пользовательских объектов. Учтите, что у пользовательских объектов есть свойство PageNumber. Я хотел бы отфильтровать свой NSArray с условием, подобным «customObject.PageNumber is Different».

Я знаю, что могу перебрать массив и устранить объект с дублирующимися номерами страниц. Но есть ли простой способ сделать это? Я пытался,

[myarray valueForKeyPath:@"distinctUnionOfObjects.pageNumber"];

Это дает мне уникальные номера страниц (например, 7, 8, 9). Но я хочу сам пользовательский объект, а не только номера страниц. Может ли какой-нибудь предикат помочь мне?

Ответы [ 2 ]

1 голос
/ 06 марта 2013

Я создал простую библиотеку под названием Linq to ObjectiveC, которая представляет собой набор методов, которые значительно облегчают решение этой проблемы.В вашем случае вам нужен метод Linq-ObjectiveC, отличный :

NSArray* itemsWithUniquePageNumbers = [items distinct:^id(id item) {
    return [item pageNumber];
}];

Возвращает массив объектов, каждый из которых имеет уникальный номер страницы.

0 голосов
/ 03 января 2012

Да, это возможно с помощью NSPredicate

customObject=[(NSArray*)[myArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.PageNumber==%d",pageNumber]] lastObject];
//pageNumber is an integer

Отфильтрованный массив - это NSArray ваших пользовательских объектов, который является результатом фильтрации с использованием предиката.Поскольку номер вашей страницы уникален, он вернет только массив из одного объекта.Мы получаем это, передавая ему сообщение lastObject.

См .: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001798-SW1

...