2017-10-19 3 views
-1

IM IはIBでのViewControllerをレイアウトしています。ビューは、ビューコントローラは、別のクラスのコードによってinstantinatedます対応のViewControllerにOSX、XCode9対物C.</p> <p>のボタンを接続プログラムXCode9、Objective-Cの、OSX

SHTourViewController.h

@property (weak) IBOutlet SHStandardButton *closeButton; 
// SHStandardButton is a subclass from NSBUtton. 

接続ボタンが含まれている(私はそれを必要と引き起こす他のクラスからこののViewControllerをinstantinateする必要一回以上)。

// Get instance of viewController 
SHTourViewController* tourViewController = [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

は今私のViewControllerのviewDidLoadメソッドでは、私は、ボタンのアクションとターゲットに接続したい:

SHTourViewController.mを私はボタン、アプリのクラッシュをクリックし

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.closeButton setAction:@selector(closeButtonClicked:)]; 
    [self.closeButton setTarget:self]; 
} 

- (void)closeButtonClicked:(id)sender { 
NSLog(@"CLOSE!"); 
} 
} 

(スレッド1:EXC_BAD_ACCESS)。私はここでやっている間違いを見つけることができません。

助けてください。

enter image description here

+0

コンソールからフルクラッシュレポートを提供してください。 – matt

+0

イメージを添付しました。なぜ-1? –

+0

Objective-C例外でブレークポイントを設定した場合、XcodeはNSApplicationMainではなく実際のエラーで停止する必要があります。これにより、作業するコード行と有用なスタックトレースが得られます。 –

答えて

0

あなたがやっていることについての十分な情報を提供されていません。しかし、それが立てば、あなたが悪いアクセスを得ているという事実は、いくつかの重要な対象が、一気に煙の中に消えたことを示唆しています。私の推測では、そのオブジェクトがselfであること、そして問題が後のコードと、この行関係しているということです。

SHTourViewController* tourViewController = 
    [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

あなたは、このビューコントローラの完全に新しいインスタンスを取得しますがされているが、あなたはそのビューを取得されていません正しくビュー階層に、ビューコントローラ自体がビューコントローラ階層に移動するので、ビューコントローラ(私は推測している)が解放されます。

しかし、あなたは私たちに関連コードを表示していないので、それはちょうど推測です。

+0

ありがとう!私は "波の手"を望んでいませんでした - 私はちょうど言った...任意のヘルプを感謝 - >と例外ブレークポイントとあなたの助言のおかげで私は間違いを見つけた。 viewControllerは、強い参照を持たないため、割り当て解除されました。一度追加すると、正常に動作しました。 –

+0

しかしそれは私が提案したものです。私の答えが正しければ、それを受け入れるのは正しいのでしょうか? – matt

関連する問題