2011-06-29 72 views
0

我有一個簡單的應用程序只有位置服務和3(幾乎是空的)不同的意見,並從某種原因我不能從視圖1查看2 - 應用程序崩潰,我得到一個異常。視圖1是原始的.xib文件,其他兩個視圖只是稍後添加的視圖。這很奇怪,因爲我可以在1-> 2之間切換(1-> 3,2-> 1,2-> 3等)。無法從多個視圖切換

我在#1視圖控制器m中使用此代碼。文件:

- (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];,看它是否仍然崩潰。

  • 明確指定您希望加載的筆尖。如果您傳入nil,則nib加載器會假定nib的命名與視圖控制器完全相同。所以,如果你沒有一個比賽,你會擁有一個異常(如本[[MyMap alloc] initWithNibName:@"NibNameWithoutExtension" bundle:nil];

  • [self present...設置一個斷點,然後執行暫停後,將鼠標懸停在「mapsView」。如果彈出的東西顯示你的mapsView爲零,你知道你的麻煩是試圖傳遞一個零對象到-presentModalViewController:animated:。如果你的斷點從來沒有命中,因爲你先拋出一個異常,那麼,你去了,麻煩就在上面。

編輯:

一兩件事。如果你的筆尖有一個連接到不再存在的動作的按鈕,那肯定會給你帶來麻煩。檢查每個按鈕並確保沒有任何操作標記爲黃色,表示按鈕的目標與向IB報告的操作不匹配。這肯定會說明你描述的斷點行爲。