获取entity.attribute == @"somevalue"的请求

jpg*_*pgr 7 attributes core-data nspredicate nsfetchrequest

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

-(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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在看这个页面:http://bit.ly/KevYwR这是正确的方向吗?

我需要使用NSPredicate还是可以不使用?

感谢您的帮助,指出正确的方向等.

Lor*_*o B 19

设置a 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
Run Code Online (Sandbox Code Playgroud)

该数组results包含sqlite文件中包含的所有托管对象.如果要获取特定对象(或更多对象),则需要对该请求使用谓词.例如:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@", @"Some Value"];
[request setPredicate:predicate]; 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,results包含属性等于的对象Some Value.设置谓词等于将WHERE子句放在SQL语句中.

注意

我想实体的名称是,EntityName并且其属性被调用attribute,其类型为string.

有关详细信息,我建议您阅读核心数据编程指南和NSFecthRequest课程参考.

希望能帮助到你.