在fetchedResultsController方法中使用NSPredicate的问题

时间:2011-05-24 14:42:26

标签: ios core-data nsfetchedresultscontroller nspredicate

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

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

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

我最初完全使用sqlite构建应用程序,我通过使用查询

实现了这一点
SELECT PRODUCT FROM TRANSLINE WHERE CUSTOMERACCNO = ?

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

这是我的代码:

- (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;
}  

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

嗯,似乎在我的沮丧中......事实上,我是一个白痴。猜猜我忘了包括什么。

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