2013-12-12 7 views
0

в моем приложении Я сортирую сущность, используя только один NSSortDescriptor, но теперь мне нужно отфильтровать данные для 4 разных атрибутов. Это код текущей сортировки, результатом являются все записи из объекта, отсортированного по атрибуту 'displayOrder', но мне нужно отфильтровать записи четырьмя другими атрибутами (год, месяц, день, группа), все из них integer32 за исключением группы, которая является строка:NSFetchedResultsController со многими NSSortDescriptor

- (NSFetchedResultsController *)fetchedResultsController 
{ 
    if (fetchedResultsController) return fetchedResultsController; 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = 
       [NSEntityDescription entityForName:@"FavoriteThing" 
          inManagedObjectContext:managedObjectContext]; 

    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sortDescriptor = 
       [[NSSortDescriptor alloc] initWithKey:@"displayOrder" 
              ascending:YES]; 

    NSArray *sortDescriptors = [[NSArray alloc] 
           initWithObjects:sortDescriptor, nil]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSFetchedResultsController *aFetchedResultsController = 
       [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                managedObjectContext:managedObjectContext 
                sectionNameKeyPath:nil cacheName:@"ThingsCache"]; 
    aFetchedResultsController.delegate = self; 
    [self setFetchedResultsController:aFetchedResultsController]; 

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

    return fetchedResultsController; 
}  

Я попытался добавить предикат:

NSNumber *yearSearched = 1965; 
NSPredicate *yearPredicate = [NSPredicate predicateWithFormat:@"todoYear = %@", yearSearched]; 

[fetchRequest setPredicate:yearPredicate]; 

Но после запуска приложения есть EXC_BAD_ACCESS ошибка на линии NSPredicate *yearPredicate = [NSPredicate predicateWithFormat:@"todoYear = %@", yearSearched];

Где атрибут «todoYear» относится к типу Integer32

+0

Что вы имеете в виду фильтр и что вы пробовали? – Wain

+0

Благодарим вас за ответ @Wain, я имею в виду фильтрацию записей, соответствующих некоторым условиям (год = x, месяц = ​​y, день = z, group = @ "Azul") ... – mvasco

+1

Итак, вы должны добавить предикат, а не другой дескриптор сортировки. – Wain

ответ

1

Ваше неправильное создание NSNumber (вы просто устанавливаете указатель на целое число). Это должно быть:

NSNumber *yearSearched = @1965; 
NSPredicate *yearPredicate = [NSPredicate predicateWithFormat:@"todoYear = %@", yearSearched]; 

[fetchRequest setPredicate:yearPredicate]; 
+0

Еще раз спасибо @Wain, обновление кода с последним ответом не вызывает никаких исключений, но приложение продолжает показывать все строки, а не ожидаемые строки, есть только одна запись, которая имеет значение 1965 в атрибуте «todoYear» ... – mvasco

+0

Вы когда-нибудь вызываете 'performFetch:' на FRC? – Wain

+0

Я думаю, что он называется методом viewDidLoad ??? – mvasco

Смежные вопросы