2

parentViewController のメソッドにアクセスしようとすると、アプリがクラッシュします。これがストーリーボードのレイアウトです

ここに画像の説明を入力

MainViewController = STLMMainViewController (ParentViewController)

Scene1 = STLMTimeDateViewController (ChildViewController)

STLMTimeDateViewController のコードは次のとおりです。

#import "STLMTimeDateViewController.h"
#import "STLMMainViewController.h"

@interface STLMTimeDateViewController ()
@property (nonatomic, strong) STLMMainViewController *stlmMainViewController;
@end


- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"The name of the controller %@",self.navigationController.parentViewController);

    stlmMainViewController= (STLMMainViewController *) self.parentViewController;
    [stlmMainViewController locationButtonSelected]; // This is where the App crashes
    NSLog(@"TimeDateController");
}

アプリは実行されますが、STLMMainViewController が呼び出されると、アプリは次のエラーでクラッシュします。

2013-02-10 16:33:57.422 MyApp[9120:c07] The name of the controller <STLMMainViewController: 0x83850d0>
2013-02-10 16:33:57.434 MyApp[9120:c07] -[UINavigationController locationButtonSelected]: unrecognized selector sent to instance 0x8371a70

次の行を削除すると:

stlmMainViewController = (STLMMainViewController *) self.parentViewController;

そしてただ去る

[stlmMainViewController locationButtonSelected];

アプリは実行され、エラーは発生しませんが、[STLMMainViewController locationButtonSelected] の次のメソッドが呼び出されません (ログは表示されません)。

-(void)locationButtonSelected
{
    [LocationButton setSelected:YES];
    [eatDrinkbutton setSelected:NO];
    [timeCalButton setSelected:NO];
    [carButton setSelected:NO];
    [contactButton setSelected:NO];
    NSLog(@"LocationButtonSelected Method");
}

locationButtonSelected メソッドのすべてのプロパティとメソッド自体は、パブリック アクセスのために STLMMainViewController の .h で宣言されています。

ありがとう

4

1 に答える 1

3

あなたはこれを試すかもしれません:

self.stlmMainViewController= (STLMMainViewController *)self.navigationController.parentViewController;

(編集:実際には、他の誰かが指摘したように、代わりにpresentingViewControllerを使用することをお勧めします。)

この直前のログ メッセージにあったようです。この場合、ナビゲーション コントローラーの親が必要です。

ところで、この行を削除してもクラッシュしない理由は、最終的locationButtonSelectedに nil に送信するためです。それはクラッシュしませんが、何もしません。

于 2013-02-11T01:08:23.377 に答える