2014-09-24 4 views
0

Я пытаюсь отфильтровать некоторые управляемые объекты. Результат - это zip.Почему этот запрос выборки ничего не возвращает

Фильтр «имя». Имя - это элемент, предоставленный корневым представлением для этого подробного представления. Имени записывает нормально:

[48582:2754928] name: To Be 
[48582:2754928] predicate: name == @"name" 

name = [self.detailItem valueForKey:@"name"]; 

NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
     // Update to handle the error appropriately. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    } 

и FetchResultsController выглядит следующим образом:

NSError *error = nil; 
    name = [self.detailItem valueForKey:@"name"]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"VerbEntity" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 
    predicate = [NSPredicate predicateWithFormat:@"name == %@",@"name"]; 
    NSLog(@"name: %@", name); 
    fetchRequest.predicate = predicate; 
    NSLog(@"predicate: %@", predicate); 

// Create the sort descriptors array. 
    NSArray *sortDescriptorArray = nil; 

    // Declare sort descriptors 
    NSSortDescriptor *sortDescriptorPrimary = nil; 




    sortDescriptorPrimary = [[NSSortDescriptor alloc] initWithKey:@"position" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 

    // Set sort descriptor array 
    sortDescriptorArray = @[sortDescriptorPrimary]; 

    // Apply sort descriptors to fetch request 
    [fetchRequest setSortDescriptors:sortDescriptorArray]; 

    NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

    NSLog(@"fetchedObjects count: %lu", (unsigned long)fetchedObjects.count); 
    _fetchedResultsController.delegate = self; 
    return _fetchedResultsController; 
} 

стоит ли что-нибудь, как ненадежного? Спасибо за любую помощь.

+2

Без предиката ваш выбор возвращает что-то? Если имя является «NSString», то как использовать имя '@» LIKE% @ "'? Разве вы не хотели менять имя @ @ «=============================================================================================================================================================================================== на ваш выбор? – Larme

+0

Что произойдет, если вы инициализируете запрос выборки по-разному? Возможно, попробуйте [NSFetchRequest fetchRequestWithEntityName: @ "VerbEntity"]; Кроме того, что такое _fetchedResultsController? NSFetchedResultsController? Если это так, вам нужно установить на него объект NSFetchRequest. –

+0

Спасибо всем. Сочетание ваших ответов решило проблему. –

ответ

1

Похоже, что на вашем _fetchedResultsController не установлен запрос на выборку. Может быть, есть больше, чем этот фрагмент кода показывает ... Но это может сработать

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"VerbEntity"]; 
request.predicate = [NSPredicate predicateWithFormat:@"name == %@",@"name"]; 

// Note: Sort descriptors available depend on the backing store type. 
NSSortDescriptor *sortDescriptorPrimary = [[NSSortDescriptor alloc] initWithKey:@"position"   
                     ascending:YES 
                     selector:@selector(localizedCaseInsensitiveCompare:)]; 

request.sortDescriptors = @[sortDescriptorPrimary]; 

// The request needs to be set on the controller. 
NSFetchedResultsController *controller = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:request 
             managedObjectContext:self.managedObjectContext 
              sectionNameKeyPath:nil 
                cacheName:nil]; 
// The controller needs to perform the fetch. 
[controller performFetch:nil]; // Optionally pass in an NSError. 
controller.delegate = self; 
_fetchedResultsController = controller; 
return controller; 
Смежные вопросы