无法从多个视图切换

时间:2011-06-29 21:57:09

标签: iphone objective-c ios4 view sdk

我有一个简单的应用程序,只有位置服务和3个(几乎是空的)不同的视图,并且由于某些原因我无法从视图1到视图2 - 应用程序崩溃,我得到一个例外。 View 1是原始.xib文件,另外两个只是我稍后添加的视图。这很奇怪,因为我可以在所有这些之间切换(1-> 3,2-> 1,2-> 3等),而不是从1-> 2。

我在#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方法的开头放置断点,当它崩溃时,它甚至不会停在那里....在我添加此代码之前,这个应用程序(它只有位置工作得很好。

任何想法?谢谢!

2 个答案:

答案 0 :(得分:1)

如果你的视图没有从任何nib文件加载,那么你应该这样做

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];
}

答案 1 :(得分: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是nil,你知道你的麻烦是试图将一个零对象传递给-presentModalViewController:animated:。如果你的断点从未命中,因为你先抛出一个异常,那么,你去,麻烦就在上面。

编辑:

还有一件事。如果您的笔尖有一个连接到不再存在的动作的按钮,那肯定会让您遇到麻烦。检查每个按钮并确保没有标记为黄色的操作,表示按钮的目标与其向IB报告的操作不匹配。这肯定会解释您描述的断点行为。