действительно ли этому коду нужен «[self.tableView reloadData]» в конце viewDidLoad (в UITableViewController) - PullRequest
2 голосов
/ 28 февраля 2011

Образец SimpleEKDemo имеет «[self.tableView reloadData]» в конце viewDidLoad в файле RootViewController.m.

Это необходимо? Любые идеи, почему эта линия была введена? Разве представление не будет прорисовано впоследствии после viewDidLoad через его вызовы делегата к методам как "cellForRowAtIndexPath"?

- (void)viewDidLoad {
    self.title = @"Events List";

    // Initialize an event store object with the init method. Initilize the array for events.
    self.eventStore = [[EKEventStore alloc] init];

    self.eventsList = [[NSMutableArray alloc] initWithArray:0];

    // Get the default calendar from store.
    self.defaultCalendar = [self.eventStore defaultCalendarForNewEvents];

    //  Create an Add button 
    UIBarButtonItem *addButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
                                UIBarButtonSystemItemAdd target:self action:@selector(addEvent:)];
    self.navigationItem.rightBarButtonItem = addButtonItem;
    [addButtonItem release];


    self.navigationController.delegate = self;

    // Fetch today's event on selected calendar and put them into the eventsList array
    [self.eventsList addObjectsFromArray:[self fetchEventsForToday]];

    [self.tableView reloadData];   // ** REALLY NEEDED ** 

}

РЕДАКТИРОВАТЬ - я заметил это в документе (см. Ниже) - мне все еще не ясно, как требуется вышеуказанная строка кода - разве это не тот случай, если вы перешли к другому представлению, а затем вернулись к это представление, ТОГДА, если (а) представление повторно инициализировано, чем оно должно было бы заполниться снова в любом случае, или (b) если представление не будет повторно инициализировано, метод "viewDidLoad" не будет вызван, следовательно, вы бы не помещать строку кода "reloadData" в конец метода viewDidLoad в любом случае нет?

UITableView переопределяет Метод layoutSubviews UIView так что он вызывает reloadData только тогда, когда вы создать новый экземпляр UITableView или когда вы назначаете новый источник данных. Перезагрузка таблицы очищается текущее состояние, включая текущее выбор. Однако, если вы явно вызовите reloadData, это очищает это состояние и любые последующие прямые или косвенные вызывать layoutSubviews не вызвать перезагрузку.

1 Ответ

3 голосов
/ 28 февраля 2011

Это на самом деле не нужно, если у вас есть статические данные, но когда вы хотите обновить содержимое таблицы из источника данных, вам нужно.

, например

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

Я думаю, вы понимаете ситуацию.

Edit:

Когда мы удаляем строку, тогда эти данные удаляются из базы данных, но остаются в таблице, если вы не вызываете delete с таблицей. теперь вы вызываете функцию базы данных и получаете запись в массиве в функции viewWillAppear, что вы можете сделать просто вызовите viewWillappear из функции commitEditingStyle и перезагрузите таблицу в viewWillappear. В этой ситуации вам необходимо перезагрузить таблицу

...