我有一个简单的应用程序,只有位置服务和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方法的开头放置断点,当它崩溃时,它甚至不会停在那里....在我添加此代码之前,这个应用程序(它只有位置工作得很好。
任何想法?谢谢!
答案 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报告的操作不匹配。这肯定会解释您描述的断点行为。