1つのビューに2つのUipopovers
-
28-10-2019 - |
質問
2つの異なるUipopoverを1つのビューに配置しようとしています。私はObjective-Cと一般的なプログラミングにかなり新しいので、1つのポップオーバーを持ち、それがどのように呼ばれるかに応じて内容を変更するスマートで効率的な方法を実行する代わりに、私はただ作成する愚かでシンプルな方法を使用しました2つのビュー、2つの代表者、2つのポップオーバーなど...それが私が問題を抱えている理由なのか、それとも他の理由であるのかはわかりません。
これが問題です。の中に viewdidload
ポップオーバーが表示されるビューの場合、私はこのコードを持っています:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
optionsViewController =[[OptionsViewController alloc]init];
optionsViewController.delegate = self;
popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
popoverController.popoverContentSize = CGSizeMake(320, 216);
[popoverController setDelegate:self];
newCurrencyViewController =[[newCurrencyViewController alloc]init];
newCurrencyViewController.delegate = self;
newCurrencyPopoverController = [[UIPopoverController alloc] initWithContentViewController:newCurrencyViewController];
newCurrencyPopoverController.popoverContentSize = CGSizeMake(320, 216);
[newCurrencyPopoverController setDelegate:self];
}
明らかに optionsViewController
ポップオーバー1内に表示されるVC(「PopoverController」と呼ばれるポップオーバーコントローラーがあります)、そして newCurrencyViewController
ポップオーバー2内に表示されるVCです(ポップオーバーコントローラーが呼ばれています」newCurrencyPopoverController
").
ビューがロードされるたびに、アプリは SIGABRT
エラー、およびコンソールには次のように書かれています。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController initWithContentViewController:] must not be called with `nil`.'
また、「instance method -Allocが見つかっていない(Defaults to IDに戻る)」というラインの警告があります。
saysnewCurrencyViewController =[[newCurrencyViewController alloc]init];
問題は、NewCurrencyPopoverControllerと呼ばれるファイルを見つけていないということだと思うので、私はどこかでファイルの名前を間違えたということでしたが、すべてをチェックして、間違いなどを見つけることができません。何か案は?
どうもありがとう!
ルーク
解決
あなたはメソッドを呼び出しています alloc
+ init
あなたの変数の newCurrencyViewController
ただし、その変数のクラスにそれらを呼び出す必要があります!
バグとのライン:
newCurrencyViewController =[[newCurrencyViewController alloc]init];
このラインの結果は次のとおりです newCurrencyViewController == nil
. 。そして、あなたが始めようとするとき UIPopoverController
その見解では、説明したようにクラッシュします。
変数の場合 newCurrencyViewController
たとえば、クラスのものです CurrencyViewController
次に、その行をこれに置き換える必要があります。
newCurrencyViewController =[[CurrencyViewController alloc] init];
他のヒント
NewCurrenceViewControllerを呼び出すときに、Allocを呼び出してinitで呼び出すオブジェクトはありません。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
optionsViewController =[[OptionsViewController alloc]init];
optionsViewController.delegate = self;
popoverController = [[UIPopoverController alloc] initWithContentViewController:optionsViewController];
popoverController.popoverContentSize = CGSizeMake(320, 216);
[popoverController setDelegate:self];
//Here is your problem---------------------------------------------
newCurrencyViewController =[[newCurrencyViewController alloc]init];
//-----------------------------------------------------------------
newCurrencyViewController.delegate = self;
newCurrencyPopoverController = [[UIPopoverController alloc] initWithContentViewController:newCurrencyViewController];
newCurrencyPopoverController.popoverContentSize = CGSizeMake(320, 216);
[newCurrencyPopoverController setDelegate:self];
}
あなたはおそらくもっと好きなものが欲しいでしょう
newCurrencyViewController = [[UICurrencyViewController alloc] init];
または、カスタムビューコントローラーの名前は