2011-06-29 20 views
0

位置サービスと3つの(ほとんど空の)異なるビューを持つ単純なアプリケーションがあります。何らかの理由でビュー1からビュー2にアクセスできない - アプリケーションがクラッシュし、例外が発生する。ビュー1は元の.xibファイルですが、他の2つは後で追加したビューです。奇妙なのは、1> 2のようなものではなく、すべてのもの(1→3,2→1、2→3など)を切り替えることができるからです。複数のビューから切り替えることができません

私は#1ビューコントローラでこのコードを使用します。ファイル:

- (IBAction) switchToMaps : (id)sender //this is the one that doesnt work 
{ 
    MyMap *mapsView = [[MyMap alloc] initWithNibName:nil bundle:nil]; 
    [self presentModalViewController:mapsView animated:YES]; 
} 


- (IBAction) switchToThird : (id)sender 
{ 
    ThirdView *third = [[ThirdView alloc] initWithNibName:nil bundle:nil]; 
    [self presentModalViewController:third animated:YES]; 
} 

および他の例として、ここでは第二ビューコントローラ(MyMaps.m)からのコードは次のとおりです。

- (IBAction) switchBack : (id)sender 
{ 
LastLocationViewController *firstView = [[LastLocationViewController alloc]  initWithNibName:nil bundle:nil]; 
    [self presentModalViewController:firstView animated:YES]; 
} 

- (IBAction) switchFront : (id)sender 
{ 
    ThirdView *lastView = [[ThirdView alloc] initWithNibName:nil bundle:nil]; 
    [self presentModalViewController:lastView animated:YES]; 
} 

私はそれがスーパー曖昧だけど、任意のアイデアはこれを引き起こす可能性がありますでしょうか?私はこれをどのようにデバッグするのか分かりません...私はブレークポイントを各IBActionメソッドの先頭に置いても、クラッシュすると、そこにも停止しません....私はこのコードを追加する前に、 )は完全にうまくいった。

任意のアイデア?ありがとう!!

答えて

1

あなたは

MyMap *mapsView = [[MyMap alloc] init]; 

ThirdView *lastView = [[ThirdView alloc] init]; 

ようにと背中の方法で行う必要があります

- (IBAction) switchBack : (id)sender 
{ 
// LastLocationViewController *firstView = [[LastLocationViewController alloc]  initWithNibName:nil bundle:nil]; // because you are allocating new memory to your last view 
    // [self presentModalViewController:firstView animated:YES]; 

    [self dismissModalViewControllerAnimated:YES]; 
} 

- (IBAction) switchFront : (id)sender 
{ 
// ThirdView *lastView = [[ThirdView alloc] initWithNibName:nil bundle:nil]; 
// [self presentModalViewController:lastView animated:YES]; 

    [self dismissModalViewControllerAnimated:YES]; 
} 
0

私の勘では

MyMap *mapsView = [[MyMap alloc] initWithNibName:nil bundle:nil];は、ペン先をロードするために失敗しているので、あなたが例外をスローしていることです。あなたのコンソール出力を見ることなく、確かに言うことは不可能です。しようとするので、いくつかのこと:

  • がコメントアウト[self presentModalViewController:mapsView animated:YES];、それはまだクラッシュするかどうかを確認します。

  • ロードする予定のペン先の名前を明示的に指定します。 nibローダは、nilを渡すと、nibの名前がView Controllerと全く同じであることを前提としています。したがって、一致しない場合は例外が発生します(このように[[MyMap alloc] initWithNibName:@"NibNameWithoutExtension" bundle:nil];

  • ブレークポイントを[self present...に設定し、実行が一時停止した後でマウスを "mapsView"に移動します。ポップアップのことでmapsViewがnilであると表示された場合、問題が無限オブジェクトを-presentModalViewController:animated:に渡そうとしていることがわかります。最初に例外をスローしたためにブレークポイントがヒットしない場合は、まあ、そこに行きます。問題は上の行です。

編集:

もう一つ。あなたのペン先にもはや存在しないアクションに接続されたボタンがある場合は、間違いなくあなたを得るでしょう。各ボタンを調べ、黄色で表示されているアクションがないことを確認して、ボタンのターゲットとIBに報告しているアクションとの間の不一致を示します。これは、あなたが記述したブレークポイントの動作を明らかに説明します。あなたのビューは、任意のnibファイルからロードされない場合

関連する問題