我今年夏天在iPhone 4上开发了一款适用于iOS 4.3的应用程序,而且运行良好。在我重新安置工作的时候,我把这个项目放在了后面。随着iOS 5的发布,我将我的Xcode和iOS SDK分别更新为4.2和5.0,我还买了一台新的iPod Touch,用于开发。
我的应用程序仍可在iPhone 4.3模拟器中运行(遗憾的是我没有iPhone 4可以再进行测试),但它在iPhone 5.0模拟器以及iPod Touch上一直崩溃。
当我尝试加载子视图并转到main并说它与SIGABRT崩溃时,会发生错误。下面是发生崩溃的代码段:
-(IBAction) showView:(id) sender{
if (self.tViewController == nil) {
self.tViewController = [[TViewController alloc] init];
}
[self.navigationController pushViewController:tViewController animated:YES];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:self.view
cache:YES];
[self.view addSubview:tViewController.view];
[UIView commitAnimations];
}
当我单步执行并到达此行时:
[self.view addSubview:tViewController.view];
它崩溃了,跳转到main.m:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
并显示在此行收到'SIGABRT':
int retVal = UIApplicationMain(argc, argv, nil, nil);
我读过这个错误来自于两次发布的内容。但是在我的'showView'功能中,我看不到我能做到的地方。除非addSubview方法做了我不知道的事情。
另外,为什么这个错误发生在5.0而不是4.3?
感谢任何帮助。
答案 0 :(得分:1)
-(IBAction) showView:(id) sender{
if (self.tViewController == nil) {
self.tViewController = [[TViewController alloc] init];
}
[self.navigationController pushViewController:tViewController animated:YES];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:.75];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
forView:self.view
cache:YES];
[self.view addSubview:tViewController.view];
[UIView commitAnimations];
}
您已使用[self.navigationController pushViewController:tViewController animated:YES]
推送此视图,那么为什么要使用[self.view addSubview:tViewController.view]
将其添加到主视图中删除此行代码。