fetchedResultsController 方法中的 NSPredicate 问题

Posted

技术标签:

【中文标题】fetchedResultsController 方法中的 NSPredicate 问题【英文标题】:Issue with NSPredicate in fetchedResultsController method 【发布时间】:2011-05-24 14:42:26 【问题描述】:

我正在创建一个应用程序,让销售人员可以通过他们的 iPhone 为他们的客户订购库存。

用户导航到客户并创建订单。出现一个空白的 tableview,然后用户通过从库存屏幕中选择项目来将项目添加到 tableview。

当他们向订单添加商品时,导航控制器会弹出视图并再次显示订单视图。用户应该只能看到该客户的订单。

我最初完全在 sqlite 中构建了应用程序,我通过使用查询实现了这一点

SELECT PRODUCT FROM TRANSLINE WHERE CUSTOMERACCNO = ?

我现在已经转向 Core Data,我需要实现相同的功能。我正在尝试使用 NSPredicate 在 fetchedResultsController 方法中实现此行为,但我似乎无法让它工作 - 我得到的只是一个空白屏幕。但是,当我不实施它时,我会收到 ALL 订单,即每个客户的订单,而不仅仅是这个客户。

这是我的代码:

- (NSFetchedResultsController *)fetchedResultsController

    if (__fetchedResultsController != nil) 
        return __fetchedResultsController;
    

    // Create the fetch request for the entity.
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    // Configure the Entity
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"TransLine" inManagedObjectContext:__managedObjectContext];
    [fetchRequest setEntity:entity];

    [fetchRequest setFetchBatchSize:20];

    //Configure the predicate
    [NSFetchedResultsController deleteCacheWithName:@"Root"];  
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"customerAccountNo == %@", _customerAccountNo];
    [fetchRequest setPredicate:predicate];

    //Configure Sort Descriptors
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"PRODAC" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];


    // nil for section name key path means "no sections".
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:__managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    aFetchedResultsController.delegate = self;

    self.fetchedResultsController = aFetchedResultsController;

    [aFetchedResultsController release];
    [fetchRequest release];
    [sortDescriptor release];
    [sortDescriptors release];

    return __fetchedResultsController;
  

提前感谢您的帮助。

【问题讨论】:

更新。我写了一个方法来测试谓词是否有效。该方法返回了一个“”,但是当我在[request setReturnsObjectsAsFaults:NO] 行中添加时有效。然而,这并不能解决上述问题。 【参考方案1】:

好吧,看来我很沮丧……事实上,我是个白痴。猜猜我忘了包括什么。

    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error])
    
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    

【讨论】:

以上是关于fetchedResultsController 方法中的 NSPredicate 问题的主要内容,如果未能解决你的问题,请参考以下文章

FetchedResultsController 中没有部分

如何将对象从 fetchedResultsController 到 Plist?

fetchedResultsController 对象的表视图部分

fetchedResultsController 和 Integer

将 fetchedResultsController 更改为 protected from private

将 fetchedResultsController 与 swift3 一起使用