質問

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];

または、カスタムビューコントローラーの名前は

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top