SimpleEKDemo サンプルには、RootViewController.m ファイルの viewDidLoad の最後に「[self.tableView reloadData]」があります。
これは必要ですか?この行が挿入された理由はありますか? 「cellForRowAtIndexPath」などのメソッドへのデリゲートへの呼び出しを介してviewDidLoadの後にビューが描画されませんか?
- (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 **
}
編集 - doco でこれに注意しました (以下を参照) - 上記のコード行がどのように必要とされるかはまだ明確ではありません - 別のビューに移動してからこのビューに戻った場合、そうではありませんか? THEN (a) ビューが再初期化された場合は、ビュー自体を再設定する必要があります。または (b) ビューが再初期化されていない場合は、「viewDidLoad」メソッドが呼び出されないため、どちらの場合でも、viewDidLoad メソッドの最後に「reloadData」コード行を配置しますか?
UITableView は UIView の layoutSubviews メソッドをオーバーライドして、UITableView の新しいインスタンスを作成するとき、または新しいデータ ソースを割り当てるときにのみ reloadData を呼び出すようにします。テーブル ビューを再読み込みすると、現在の選択を含む現在の状態がクリアされます。ただし、reloadData を明示的に呼び出すと、この状態がクリアされ、以降の直接的または間接的な layoutSubviews の呼び出しはリロードをトリガーしません。