Обновить данные NSFetchedResultsController?

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

Когда я создаю новый управляемый объект (в совершенно отдельном представлении), я отправляю уведомление, которое пытается перезагрузить мое табличное представление с новыми данными, которые включают в себя новый объект, который я только что создал.

Я не редактирую табличное представление.

Существует только один управляемый контекст.

Я не могу понять, что я делаю неправильно. Если я закрою приложение и перезапущу мой новый объект в представлении таблицы. Я пытаюсь вызвать reloadData, когда получаю уведомление о создании нового объекта, и я также пытался выполнить выборку снова, но все, что я в итоге получаю, - это пустое табличное представление.

С точки зрения кода, мой ListViewController:

@interface MyNotesViewController : UIViewController
{
    NSManagedObjectContext * __managedObjectContext;
    UITableView * _notesTableView;
    MyNotesTableViewDelegate_DataSource * _tableDelegate_DataSource;
}

Мой viewDidLoad выглядит так:

- (void)viewDidLoad
{
    [super viewDidLoad];

    _tableDelegate_DataSource = [[MyNotesTableViewDelegate_DataSource alloc] init];
    _tableDelegate_DataSource.managedObjectContext = __managedObjectContext;
    [_notesTableView setDataSource:_tableDelegate_DataSource];

    NSError * _coreDataError;
    BOOL success = [[_tableDelegate_DataSource fetchedResultsController] performFetch:&_coreDataError];

    if(success){
        [_notesTableView reloadData];
    }
}

В моем объекте делегата / источника данных у меня есть:

@interface MyCommutesTableViewDelegate_DataSource : NSObject 

<UITableViewDataSource, NSFetchedResultsControllerDelegate>
{
    NSManagedObjectContext * __managedObjectContext;
    NSFetchedResultsController * __fetchedResultsController;
}

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

@end

Отрывок реализации:

-(NSFetchedResultsController*)fetchedResultsController{
    if(!__fetchedResultsController){
        NSFetchRequest * request = [[NSFetchRequest alloc] init];
        [request setEntity:[NSEntityDescription entityForName:@"Note" inManagedObjectContext:__managedObjectContext]];

        [request setFetchBatchSize:10];

        NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"noteDate" ascending:NO];
        [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
        [sortDescriptor release];

        __fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:__managedObjectContext sectionNameKeyPath:nil cacheName:nil];


        __fetchedResultsController.delegate = self;
        [request release];

    }
    return __fetchedResultsController;
}

У меня есть странные методы источника данных UITableView здесь:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    id <NSFetchedResultsSectionInfo> sectionInfo = 
    [[__fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"NotesTableViewCell";

    NotesTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {        
        NSArray * topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"NotesTableViewCell" owner:nil options:nil];
        for(id currentObject in topLevelObjects){
            if([currentObject isKindOfClass:[UITableViewCell class]]){
                cell = (NotesTableViewCell*) currentObject;
                break;
            }
        }

    }

// Configure the cell.
    Note * _note = [__fetchedResultsController objectAtIndexPath:indexPath];

    [...]

    return cell;
}

ОБНОВИТЬ

Я вернулся к простому запросу всех объектов, потому что мне нужно было быстро решить мою проблему, а затем я понял, что после сохранения контекста мой запрос на выборку, который я ранее использовал при запуске приложения, теперь не возвращает данных, ошибок нет, но просто ничего не возвращает

Так что я думаю, что нет никаких проблем с тем, как я реализую NSFetchResultsController. Но как запрос может начать не возвращать результаты после сохранения нового объекта?

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

стандартный запрос:

-(NSArray*)getNotes{
    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"Note" inManagedObjectContext:[self managedObjectContext]];
    [request setEntity:entity];

    NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"noteDate" ascending:NO];
    [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
    [sortDescriptor release];

    NSError * coreDataError;
    NSArray * fetchedObjects = [[self managedObjectContext] executeFetchRequest:request error:&coreDataError];
    [request release];

    if(fetchedObjects != nil){
        return fetchedObjects;
    } else {
        NSLog(@"ERR: %@", coreDataError);
        return nil;
    }
}

Я жду уведомления о том, что в Core Data добавлен новый объект, а затем я вызываю вышеуказанный метод и затем вызываю reloadData в моем табличном представлении ...

Ответы на вопрос(3)

Ваш ответ на вопрос