0

サンプル プロジェクトの AppPrefs から次の行を使用しました。

UITableView *tableView = ((UITableViewController *)self.navController.visibleViewController).tableView;

もちろん完璧に動作し、

だから私は試しました:

UISearchBar *searchBar = (UIViewController *)mySearchBar;

mySearchBarしかし、それがプロパティであり、MainViewController (クラス UIViewController) で初期化されていても、宣言されていないという警告が表示されます。

AppDelegate から MainViewController のさまざまなオブジェクトにアクセスする必要があるため、設定が変更されるたびにアプリが更新されます。

4

2 に答える 2

1

痛い、あなたのコードは可能な限り多くの場所で間違っています。どこで説明しましょう:

1。キャストmySearchBarUIViewController *てから、別のポインター型 (型UISearchBar *) に割り当てます。

二。アプリ デリゲートからこれを記述している場合、どのクラスの (さらにはどのオブジェクトの) プロパティを使用しているかをコンパイラが認識しなければならないのはなぜでしょうか? 同じ名前のプロパティを持つ複数のオブジェクト/クラスが存在する場合があります。

型キャストとプロパティへのアクセスを混同しているように感じます (したがって、iOS 開発を直接掘り下げる前に、プレーン C を正しく学習することを強くお勧めします。これは非常に基本的な質問であるため、これをまだ理解していない場合、低品質のコードが生成される可能性があります) . ビュー コントローラーのインスタンスを維持し (それをグローバル変数、シングルトン、さらにはアプリケーション デリゲート オブジェクトのプロパティにする)、そこからアクセスする必要があります。例:

UISearchBar *bar = [[[[UIApplication sharedApplication] delegate] mainViewController] searchBar];
于 2012-07-30T20:40:41.680 に答える
0

「mySearchBar」が MainViewController で宣言されたプロパティであり、self.navController.visibleController が MainViewController のインスタンスである場合。次のようにアクセスするだけです:

UISearchBar* searchBar= self.navController.visibleController.mySearchBar

mySearchBar が AppDelegate で宣言されていないため、AppDelegate に存在しないものを割り当てようとしています。

于 2012-07-30T20:41:01.923 に答える