2012-01-03 4 views
0

私はカスタムオブジェクトのNSArrayを持っています。カスタムオブジェクトにPageNumberプロパティがあるとします。 "customObject.PageNumber is distinct"のような条件でNSArrayをフィルタリングしたいと思います。NSPredicateを使用する個別のオブジェクト

私は配列をループすることができ、duplicate pageNumbersでオブジェクトを削除することができます。しかし、それを行う簡単な方法はありますか?私は試してみた

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

私には、ユニークなページ番号(7,8,9など)が与えられています。しかし、私はページ番号だけでなく、カスタムオブジェクト自体を必要としています。どの述語で私を助けることができますか?

答えて

1

を私が解決するためにこの種の問題がはるかに容易になりますメソッドの集合であるObjectiveCへのLINQと呼ばれる簡単なライブラリを、作成しています。これは、オブジェクトの配列、独自のページ番号で各1を返し

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

:あなたのケースでは、Linq-to-ObjectiveC distinct方法を必要としています。

+0

これはかなりクールです。ありがとう! – Vignesh

0

はい、それはフィルターの配列は、述語を使用してフィルタリングした結果であるカスタムオブジェクトのNSArrayあるNSPredicate

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

の助けを借りて可能です。あなたのページ番号はユニークなので、1つのオブジェクトの配列だけを返します。それにはlastObjectメッセージを渡すことでそれを取得します。

は参照してください: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/predicates.html#//apple_ref/doc/uid/TP40001798-SW1

+0

申し訳ありません。私の質問は間違った解釈につながります。私はそれを更新します。オブジェクトに固有のページ番号がある配列が必要です。 – Vignesh

+0

@Vignesh私は同じ問題に直面しています..何か解決策がありますか? – Girish