获取实体请求 == @ "somevalue"



如何设置获取请求以仅从具有一个特定值的实体属性中提取数据?这是我以前使用过的基本代码。

-(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还是可以不使用?

感谢您的任何帮助,指出正确的方向等。

设置 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 的对象。设置谓词等于将 WHERE 子句放在 SQL 语句中。

注意

我想实体的名称是EntityName的,它的属性被称为字符串类型的attribute

有关更多信息,我建议您阅读核心数据编程指南和NSFecthRequest类参考。

  • http://developer.apple.com/library/iOS/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

  • https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSFetchRequest_Class/NSFetchRequest.html

希望对您有所帮助。

最新更新