Проблема с NSPredicate в методе fetchedResultsController - PullRequest
1 голос
/ 24 мая 2011

Я создаю приложение, которое позволяет продавцу заказывать акции для своих клиентов со своего iPhone.

Пользователь переходит к клиенту и создает заказ. Появляется пустой вид таблицы, а затем пользователь добавляет элементы в вид таблицы, выбирая их на экране инвентаря.

Когда они добавляют элемент в заказ, контроллер навигации открывает представление и снова показывает представление заказа. Пользователь должен видеть только заказы для этого клиента.

Я изначально построил приложение полностью в sqlite и достиг этого, используя запрос

SELECT PRODUCT FROM TRANSLINE WHERE CUSTOMERACCNO = ?

Я перешел на Core Data, и мне нужно добиться той же функциональности. Я пытаюсь реализовать это поведение в методе fetchedResultsController с использованием NSPredicate, но я не могу заставить его работать - все, что я получаю, это пустой экран. Однако, когда я его не реализую, я получаю 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;
}  

Заранее спасибо за вашу помощь.

1 Ответ

1 голос
/ 25 мая 2011

Ну, кажется, что в моем разочаровании .... Я, на самом деле, идиот.Угадай, что я забыл включить.

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