1

私は2つの初期コントローラーを持つSplitViewControllerアプリを持っています:

  • leftViewController (マスター)
  • rightViewController (詳細)

私のrightViewController(詳細)には、私のメニュー(マスター)を表示/非表示にするボタンを表示するためのsplitViewControllerのデリゲートがあります

私の leftViewController (マスター) はメニュー アプリケーションです。メニューの要素を選択すると、マスターに接続されたセグエがトリガーされ、メニューの選択された要素の detailViewController が置き換えられます。

それを行うと、メニューを非表示にするために iPhone を回転させようとすると、アプリがクラッシュして次のように表示されます。

*** -[rightViewController respondsToSelector:]: message sent to deallocated instance 

私のsplitViewControllerがデリゲートである古いrightViewControllerと通信したいためだと思いますが、それはなくなり、私のビューで置き換えられました。

多分私は必要かどうか:

デリゲートを新しいviewController(詳細)に再割り当てするか、rightViewControllerのデリゲートを削除してからnewViewControllerに割り当てます

私の新しいviewControllerでもこれを試しました:

@interface newViewController ()<UISplitViewControllerDelegate>

@end

@implementation newViewController 


- (void)viewDidLoad
{

    UISplitViewController *splitViewController = (UISplitViewController *)self.view.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
}
...
@end

しかし、まだ機能していません...同じメッセージが表示されます

どうすればこれを修正できますか???

前もって感謝します

編集:私の質問に答えるのを助けるために私のセグエコードを追加してください

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"viewSceneAgenda"]) {

        [segue.destinationViewController setTitle:@"Citas"];
        [segue.destinationViewController setUserIDElement:UID_CUS];
        [segue.destinationViewController setOverallAppointments:overallDates];

    }
}
4

2 に答える 2

6

newViewController に言ったようにデリゲートを渡す必要があるかもしれません...これを leftViewController (マスター) に追加しないのはなぜですか...

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([segue.identifier isEqualToString:@"showNewViewControllerScene"]) {

        UISplitViewController *splitViewController = (UISplitViewController *)self.view.window.rootViewController;
        splitViewController.delegate = segue.destinationViewController;

    }
}

セグエ識別子 (showNewViewControllerScene) を置き換えて、ストーリーボード上の自分のものと一致させるだけです

于 2013-09-20T18:34:54.993 に答える
1

イエスの答えを補完するつもり

私はいくつかのセグエを扱っているので、それらすべてに UISplitView のデリゲートが必要です。また、iPhone は分割ビューをサポートしていないため、ユーザーが iPad でこのアプリを実行している場合にのみ、デリゲートを割り当てる条件を追加しました。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{


    if ([[UIDevice currentDevice].model hasPrefix:@"iPad"]) {
        UISplitViewController *splitViewController = (UISplitViewController *)self.view.window.rootViewController;
        splitViewController.delegate = segue.destinationViewController;
    }

    if ([segue.identifier isEqualToString:@"viewSceneAgenda"]) {

        [segue.destinationViewController setTitle:@"Citas"];
        [segue.destinationViewController setUserIDElement:UID_CUS];
        [segue.destinationViewController setOverallAppointments:overallDates];

    }
}
于 2013-09-20T19:04:49.400 に答える