7

特定の値を持つエンティティの属性からのみデータを取得するようにフェッチ リクエストを設定するにはどうすればよいですか? これは私が以前に使用した基本的なコードです。

-(void)fetchResults
{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:self.entityDescription.name];
    NSString *cacheName = [self.entityDescription.name stringByAppendingString:@"Cache"];

    // predicate code
    if (self.predicate != nil) {
        [fetchRequest setPredicate:self.predicate];
    }
    // end of predicate code

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:cacheName];

    BOOL success;
    NSError *error;
    success = [self.fetchedResultsController performFetch:&error];
    if (!success)
    {
        NSLog(@"%@", [error localizedDescription]);
    }
}

私はこのページを見てきました: http://bit.ly/KevYwRこれは正しい方向ですか?

使用する必要がありますNSPredicateか?

助けてくれてありがとう、正しい方向を指し示すなど。

4

1 に答える 1

19

の設定NSFetchRequestは、SQL 言語の SELECT ステートメントに相当します。

簡単な例を次に示します。

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

// error handling code

配列resultsには、sqlite ファイル内に含まれるすべての管理対象オブジェクトが含まれます。特定のオブジェクト (または複数のオブジェクト) を取得する場合は、その要求で述語を使用する必要があります。例えば:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@", @"Some Value"];
[request setPredicate:predicate]; 

この場合results、属性が と等しいオブジェクトが含まれますSome Value。述語を設定することは、SQL ステートメントに WHERE 句を入れることと同じです。

ノート

エンティティの名前は でEntityName、そのプロパティはattribute文字列型で呼び出されると思います。

詳細については、Core Data プログラミング ガイドとNSFecthRequestクラス リファレンスを読むことをお勧めします。

それが役に立てば幸い。

于 2012-05-16T07:54:52.990 に答える