【问题标题】:iOS application with two views. It crashes but doesn't give me an error具有两个视图的 iOS 应用程序。它崩溃但没有给我一个错误
【发布时间】:2013-03-15 04:29:12
【问题描述】:

该程序基本上只是应该在两个视图之间切换。我正在尝试学习如何制作多视图应用。

{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

FirstViewController *aView = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
self.firstView = aView;
[window addSubview:firstView.view];

self.window.rootViewController = aView;

return YES;

}

我收到一条错误消息,提示“应用程序在应用程序启动结束时应该有一个根视图控制器”。我添加了行“self.window.rootViewController = aView;”那个错误就消失了。现在,我的应用程序将从视图 1 切换到视图 2(它总是能够做到这一点)但是当尝试切换回来时它会崩溃。我得到的唯一输出是“(11db)”。它会将我带到一个带有一堆内存地址的屏幕,并以绿色突出显示以下内容:

0x10dc09b:  movl   8(%edx), %edi

它说“线程 1:EXC_BAD_ACCESS(代码=2,地址)”

我不知道如何解释这个输出。我按照 youtube 上的一系列视频指南来创建这个程序。我做了两次以确保我做的一切都是正确的(我做到了)。如果您喜欢我所做的一切,这些指南称为“xcode 教程#3 第 1/3 部分:多视图应用程序”。

我非常困惑。似乎没有其他人有问题。

【问题讨论】:

  • 如何在视图之间切换? FirstViewController 是否替换了在情节提要中创建的控制器? (顺便说一句,您不需要该行:[window addSubview:firstView.view])。
  • 您不向UIWindow 添加子视图,设置rootViewController 会为您做到这一点。我建议将您的子视图添加到您的FirstViewControllerview
  • @rdelmar 我提前道歉。我不知道如何格式化我的回复。我有两个视图,每个视图都有一个按钮。这些按钮连接到名为“swapViews”的方法,每个方法都包含以下代码:-(IBAction)swapViews:(id)sender{ TestViewsAppDelegate *delegate = (TestViewsAppDelegate *)[[UIApplication sharedApplication] delegate]; FirstViewController *firstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; [delegate switchViews:self.view toView:firstView.view]; }
  • 那么 switchViews 方法中的内容是什么?
  • 我为这种格式道歉...我不知道如何使它看起来像实际代码 =/ -(IBAction)swapViews:(id)sender{ TestViewsAppDelegate *delegate = (TestViewsAppDelegate *)[[UIApplication sharedApplication] delegate]; FirstViewController *firstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; [delegate switchViews:self.view toView:firstView.view]; }

标签: ios objective-c xcode


【解决方案1】:

在您的窗口可见之前,您应该设置它的根视图控制器。

试试这个:

{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];


FirstViewController *aView = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
self.firstView = aView;

self.window.rootViewController = aView;

[self.window makeKeyAndVisible];

return YES;

}

如果您想查看多个视图,请在 RootViewController 的 *viewDidLoad* 中写入条件,然后您可以重定向到另一个视图。

如果您还有任何疑问,请告诉我。

一切顺利!!!

【讨论】:

  • 你的代码似乎和我的一模一样。我看不出有什么区别。我将您的代码复制/粘贴到我的代码上,但没有任何改变。我尝试将 [self.window makeKeyAndVisible] 移动到我分配 rootViewController 的下方,但这仍然给我一个错误。
  • 不幸的是,我仍然遇到同样的错误。我没有得到任何输出,但它在显示大量内存地址和与上面相同的代码行的页面上冻结。
  • 这个代码在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ???
猜你喜欢
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多