2013-02-09 3 views
0

Здравствуйте вот моя реализация NSFetchedResultsController:Основные данные не выборки объектов

-(NSFetchedResultsController *)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 
    NSLog(@"context - %@",self.context); 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Categories" inManagedObjectContext:self.context]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
           initWithKey:@"name" ascending:YES]; 
    [fetchRequest setSortDescriptors:@[sort]]; 

    [fetchRequest setFetchBatchSize:20]; 

    NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
             managedObjectContext:self.context sectionNameKeyPath:nil 
                cacheName:@"root"]; 
    _fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 
// [[self context] fetchObjectsForEntityName:@"Categories" withPredicate: 
//  nil] ; 
    return _fetchedResultsController; 
} 

fetchedResultsController.fetchedObjects всегда равна нулю. Вот как я добавляю объекты:

-(void)addCategoryWithName:(NSString *)name 
{ 
    NSLog(@"context - %@",self.context); 
    Categories *category = (Categories *)[NSEntityDescription insertNewObjectForEntityForName:@"Categories" inManagedObjectContext:self.context]; 
    category.name = name; 
    NSLog(@"category name - %@",category.name); 
    category.displayOrder = [NSNumber numberWithFloat:1.0f]; 
    //  site.displayOrder = displayOrder; 

    NSError __block *error; 
    if (![self.context save:&error]){ 
     NSLog(@"Error saving - %@", [error localizedDescription]); 
    } 
} 

Там нет ошибки, нет ничего. Если я вижу файл .sqlite в папке «Документы», он изменяется, но я не могу получить какие-либо объекты. Действительно странно, я использую принципиально одни и те же коды для моего другого приложения, и все работает отлично.

Любые идеи?

+1

Вы называете 'performFetch' где-то? - Также я бы не указал 'cacheName', если' sectionNameKeyPath = nil'. –

+0

Полностью забыл о performFetch. Кажется, что не какое-то программирование какое-то время имеет свои эффекты. Однако хороший опыт узнал здесь, спасибо! Только один вопрос - почему бы не указать кеш, когда sectionNameKeyPath равен нулю? – Devfly

+0

Вложу это в свой ответ ... –

ответ

1

Вы должны позвонить по номеру performFetch на контроллере выбранных результатов. В противном случае он ничего не получит и также не отслеживает изменения. Например добавить

NSError *error; 
if (![_fetchedResultsController performFetch:&error]) { 
    // error handling 
} 

в конце метода fetchedResultsController геттера.

Примечание: кажется, что указываемый cacheName без sectionNameKeyPath может вызвать проблемы, см UITableView with NSFetchedResultsController Does Not Load the Second Time. Поскольку кеш используется для кэширования информации о секциях, он не нужен, если у вас нет разделов.

Обновление: Предыдущее примечание больше недействительно, оказалось, что проблемы связанного вопроса имеют другую причину.

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