почему «[self.tableView reloadData]» не гарантирует, что я вижу последнюю строку для данных, которые я только что добавил в UITableView?(код включен) - PullRequest
2 голосов
/ 31 марта 2011

Почему "[self.tableView reloadData]" не гарантирует, что я вижу последнюю строку для данных, которые я только что добавил в UITableView? (включенный код) То есть после возврата из контроллера AddItem к этому методу делегата I:

  • обновить репозиторий основных данных новым значением
  • вызов: "[self.tableView reloadData]"
  • отклонить модальное представление
  • но затем обратно в UITableView новая строка не существует?
  • Когда я останавливаю и перезапускаю приложение iPhone в симуляторе, строка отображается правильно

Почему у меня не работает "reloadData" и что мне делать?

Примечание. Я понимаю, что существует подход, при котором вы вручную создаете новую строку с помощью «insertRowsAtIndexPaths» в табличном представлении. Не уверен, какой подход лучше, но в любом случае хотел бы понять, почему reloadData здесь не работает.

Код:

- (void)newItemController:(NewItemController *)controller didFinishWithSave:(BOOL)save newItemText:(NSString*)itemText 
{   
    // Add data to CoreData store
    WEView *newWEView = (WEView *) [NSEntityDescription insertNewObjectForEntityForName:@"WEView" inManagedObjectContext:managedObjectContext];
    newWEView.title = itemText;

    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
        // Handle the error.
        DLog(@"ERROR DURING SAVE");
        abort();
    }

    // Dismiss the modal view to return to the main list
   [self dismissModalViewControllerAnimated:YES];

    // Reload Data
    [self.tableView reloadData];
}   

спасибо

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

- (void)updateTableDataViaCoreData 
{
    // Core Data Request
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"WEView" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];

    // CoreData Sort Descriptor
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];
    [sortDescriptors release];
    [sortDescriptor release];

    // Core Data - Execute Request
    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
        DLog(@"Error when fetching data");
        abort();
    }

    // Core Data finish Up
    [self setViewConfigArray:mutableFetchResults];
    [mutableFetchResults release];
    [request release];
}

Ответы [ 3 ]

4 голосов
/ 31 марта 2011

Из вашего примера кода похоже, что вы использовали рекомендованный метод Core Data, где у вас есть NSFetchedResultsController, управляющий данными табличного представления. Если это так, то вы должны сообщить контроллеру fetchedresults tableview о необходимости повторного извлечения данных перед вызовом reloadData.

Итак, перед reloadData, скажите вашему NSFetchedResultsController, чтобы он заново извлек данные

[[self frc] performFetch:&error];

Вставка объекта в управляемый текст не делает его доступным для таблицы.

0 голосов
/ 31 марта 2011

Вы должны были вызвать перезагрузку таблицы как

[classname.tableview reloadData];

Надеюсь, это поможет .....

0 голосов
/ 31 марта 2011

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

...