3

フェッチを機能させるために数時間を費やしました。重複を取り除く必要があるので、このガイドcore-data-how-to-do-a-select-distinct に従うことができると思い ましたが、常に空の配列が返されます。

これが私のコードです:

NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"RBTag" inManagedObjectContext:[self context]];
request.entity = entity;
request.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]];
request.returnsDistinctResults = YES;
request.resultType = NSDictionaryResultType;

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];


NSError *error = nil;
NSArray *distincResults = [[self context] executeFetchRequest:request error:&error];


NSLog(@"Result: %@", distincResults);

エラーは発生しません。NSPropertyDescription を確認したところ、私のプロパティが見つかりました。私がコメントアウトした場合:

request.resultType = NSDictionaryResultType;

その後、結果が得られますが、明確ではありません。=(

4

2 に答える 2

7

ガイドやアップルのドキュメントには何もありませんが、一生懸命グーグルした後、次の投稿を見つけました: bbarnheart Must save context to persist store before changing the resultType to NSDictionaryResultType.

于 2012-09-24T16:41:40.040 に答える
1

propertiesToFetchプロパティ名の配列が必要ですが、配列に設定しますNSAttributeDescription。試す

request.propertiesToFetch = [NSArray arrayWithObject:@"name"];

設定しない場合request.resultType = NSDictionaryResultType;propertiesToFetch無視されます。

于 2012-09-24T16:38:54.940 に答える