2011-11-14 2 views
0

コアデータが新しく、ソートや指定された属性の重複していないデータの取り出しに関する情報を見つけるのが難しいです。コアデータをソートして重複を表示しない

私は場所のリストを持っていて、それらはすべて異なる住所を持っていますが、いくつかは同じ都市を持っています。私は、重複した都市を除くすべての都市をアルファベット順に取り出したいと思っています。

2つの属性、1つは都市、もう1つはlocationDetailsにするのが最善の方法でしょうか。都市属性では、重複のない都市の一覧が表示されます。都市を選択すると、その都市属性のすべてのlocationDetailsが取得されます。

おかげで、

+0

[Pro Core Data For iOS](http://www.apress.com/9781430233558)は、コアデータに関する非常に深いチュートリアルベースの書籍です。 – AndrewHuss

答えて

1

はい、最も良い方法は、都市のための別の属性を持つことです。また、独自のエンティティを構造化する必要はありません。フェッチ要求で一意のソートとフェッチを行うことができます。

NSFetchRequest *request=[[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"<your entity name>" inManagedObjectContext:context]]; 
[request setResultType:NSDictionaryResultType]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"City"]]; 
request.sortDescriptors=[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"City" ascending:YES]]; 
[request setReturnsDistinctResults:YES]; 

メモ:この要求は、Cityをキーとする辞書の配列を返します。フェッチを実行した後にNSFetchRequestを解放することを忘れないでください。

EDIT

ユーザーが都市をクリックすると、いくつかの変数(cityName)に保管してください。

request.predicate=[NSPredicate predicateWithFormat:@"City = %@",cityName]; 

同じエンティティでこれを行う必要があります。これにより、都市名が選択されたオブジェクトのみがフェッチされます。さて、あなたは2通りの方法でフェッチを行うことができ、次のいずれか

  1. は全体のエンティティを取得し、その後dispay形式 entityName.Locationを使用します。この場合、あなたは オブジェクトのようにフェッチするためのプロパティを設定し

  2. のNSArrayのでしょう:

    第2のケースで
    [request setPropertiesToFetch:[NSArray arrayWithObject:@"Location"]]; 
    

を、それが結果を設定することを忘れないでください(NSDictionaryのを返します。前述のようにNSDictionaryResultTypeとして入力します)。

+0

辞書の配列にどのように多くの場所が都市に関連付けられているのを知っていますか?都市のリストを表示する必要があります。都市を選択すると、複数の都市がある場合は、その都市のリストが表示されます。 1つだけの場合は、詳細な場所のビューを表示します。 コアデータからオブジェクトのリストを取得する唯一の方法は、それを辞書として返すことです。 – Bassem

+0

私はあなたの問題を解決するための答えを編集しました。 – MadhavanRP

0
あなたはそれぞれのユニークな都市のための都市の実体と関連する市のエンティティへの1対1の関係を持つ場所のエンティティ(およびワンを持っているように、あなたは、あなたのコアデータモデルを構築する必要があり

多対多の逆関係)。都市名自体はLocationエンティティの一部であってはなりません。このように構造化すると、単純にすべてのCityエンティティを取得できます。

並べ替えに関しては、NSFetchRequestNSSortDescriptorを追加する必要があります。例:

NSSortDescriptor *sorter; 
sorter = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES]; 
[fetchRequest setSortDescriptors: [NSArray arrayWithObject: sortDescriptor]]; 
関連する問題