3

この質問とKyleCの親切な回答に応じてUITableViewController、コアデータからのフェッチに依存する多くの行を実装しました。すべての行には単純なNSString(フェッチされたオブジェクトの名前) が表示され、UIPickerView非表示になっています。

UITableViewController問題は、ピッカービューで開く前の行をタップするUITableViewControllerと、セグエ遷移に遅延が発生することは明らかです。

これは、以前のコントローラー (コア データ リクエストを実行することさえあります) は移行がそれほど遅くないためです。

-

一部UIPickerViewの s は移行を非常に遅く、かなり醜くすることができますか? どちらがゆっくり有罪かを理解するには、どのモードで Instruments を使用すればよいですか?

さらに重要: 速度が s の数に由来する場合、どうすればUIPickerViewこれを最適化できますか?

アプリは非常に軽量で、Core Data からフェッチされたオブジェクトは 4 秒で 4 つだけであることを明確にしたいと思いますUIPickerView

4

1 に答える 1

9

UIPickerViews と UIDatePickers は、ストーリーボード (およびおそらく xib のものですが、私は試していません) からの読み込みが非常に遅いようです。iPad Air では、「非表示」セルに 4 つの UIPickerView と 8 つの UIDatePickers を含む静的 UITableViewController をロードするのに約 3 秒かかります。(最新かつ最高のハードウェアで実行されているネイティブ UI の場合、3 秒は永遠です!)

私が見つけた回避策は、非表示の行が表示される前に、プログラムで UIPickerViews と UIDatePickers を作成することです。私が行ったことは、Interface Builder で空のセルを作成し、それらのセルを IBOutlet プロパティにリンクしてから、これらのメソッドを使用して DatePickers および Picker ビューを作成することでした。

- (UIDatePicker*)datePickerForCell:(UITableViewCell*)cell {
    UIDatePicker * datePicker = [[UIDatePicker alloc] initWithFrame:cell.bounds];
    [datePicker setDatePickerMode:UIDatePickerModeDateAndTime];
    [datePicker addTarget:self action:@selector(pickerDateChanged:) forControlEvents:UIControlEventValueChanged];
    datePicker.hidden = YES;
    [cell addSubview:datePicker];

    return datePicker;
}

- (UIPickerView*)pickerViewForCell:(UITableViewCell*)cell {
    UIPickerView * picker = [[UIPickerView alloc] initWithFrame:cell.bounds];
    [picker setDelegate:self];
    [picker setDataSource:self];
    picker.hidden = YES;
    [cell addSubview:picker];
    return picker;
}

これにより、UITableViewController の読み込み時間が 10 分の 1 秒に短縮され、非表示のテーブルビューを表示するアニメーションには影響がないようです。

注: viewDidAppear: メソッドでピッカーを作成しようとしましたが、それでも UI が遅延しているように見えました。

于 2014-03-11T00:17:51.760 に答える