【问题标题】:fetching particular predicate from database从数据库中获取特定谓词
【发布时间】:2011-08-12 06:53:10
【问题描述】:

我有 4 个 CoreData 数据库。每个实际上都有自己的价值。但它太重了,我想把它减少到 1 个数据库。所以每次我想从数据库中提取信息时,我都可以选择要提取的内容。我需要使用 NSPredicate 来设置我想要拉 izzit 的字符串?

我是否像这样设置我的 NSPredicate?

NSString *value = @"Food";
NSString *wildcardedString = [NSString stringWithFormat:@"%@*", value];
[[NSPredicate predicateWithFormat:@"ANY places.type like %@", wildcardedString];

以及如何将 NSPredicate 与获取请求序列绑定?

这是我的 fetchedResultsController

- (NSFetchedResultsController *)fetchedResultsController {
    if (fetchedResultsController != nil) 
    {
        return fetchedResultsController;
    }

    CoreDataMelakaAppDelegate *appDelegate = (CoreDataMelakaAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"WhereTo" inManagedObjectContext:context]];
    NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease];
    NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptor, nil] autorelease];
    [fetchRequest setSortDescriptors:sortDescriptors];
   // NSPredicate *pred = [NSPredicate predicateWithFormat:@"(name = %@)", wher.name];
    //[fetchRequest setPredicate:pred];
    NSString *value = @"Nasi";
    NSString *wildcardedString = [NSString stringWithFormat:@"%@*", value];
    [[NSPredicate predicateWithFormat:@"ANY wher.name like %@", wildcardedString];
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:@"Root"];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;
    [aFetchedResultsController release];
    return fetchedResultsController;
}  

【问题讨论】:

    标签: ios core-data nspredicate nsfetchrequest


    【解决方案1】:

    当您更改提取结果控制器 (FRC) 使用的提取请求的谓词时,您必须创建一个新的提取结果控制器。

    您的代码在逻辑上很好,但它只创建了一次 FRC,其谓词编译为:

    ANY wher.name like Nasi*
    

    ... 每次 FRC 执行它的 fetch 时,它都会使用那个确切的谓词。

    如果您想使用灵活的谓词,则每次更改谓词时都需要创建一个新的 FRC。

    【讨论】:

    • 意思是,我打电话一次?我真的不明白。有什么可以建议我阅读的阅读资料吗?
    • 您配置了一个提取请求,并且每次调用 performFetch: 时都会一遍又一遍地运行完全相同的提取请求。如果你想使用不同的谓词,你必须初始化一个新的 NSFetchedResultsController
    • 好的。我得到它。我现在面临一个致命错误,但我正在努力解决它,如果我无法解决它会发布另一个问题
    猜你喜欢
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2016-05-08
    • 2013-09-02
    • 2011-01-19
    相关资源
    最近更新 更多