使用nib文件切换视图非常慢

时间:2013-09-11 15:04:47

标签: ios objective-c multithreading uiviewcontroller nib

我将尝试在这篇文章中尽可能详细地说明,因为它非常重要,我完成了这项任务,我不知道为什么我会得到这些奇怪的结果。所以,就在这里。

我有5个视图控制器/ .xib文件。我还有appdelegate和一个LocationManager单例类,旨在为每个.h / .m文件提供位置更新。视图控制器1(称为WelcomeView)是位置更新的委托。所以它有didUpdateLocations方法。它监视一个人进入特定区域。当输入该特定区域时,它告诉该人去另一个区域以获得各种奖品。 didUpdateLocations监视所有移动,包括观察该人进入区域1和区域2.如果该人成功进入区域1,它应该将视图切换到TransitionViewController 3秒钟,然后切换到TimerViewController。这是我用来切换的代码:

self.transitionView = [[TransitionViewController alloc] initWithNibName:@"TransitionViewController" bundle:nil];
[self.view addSubview: self.transitionView.view];

然后在转换视图控制器中,我让它睡3秒然后切换到timerviewcontroller,如下所示:

sleep(3);
self.timerView = [[TimerViewController alloc] initWithNibName:@"TimerViewController" bundle:nil];
[self.view addSubview:self.timerView.view];

当我真正进入该区域时,所有这一切都应该发生,原来它就像一个魅力。事实证明,只有当手机插入Mac并从Xcode运行时,它才有效。现在,我已经知道它只需要45秒 - 1分钟实际切​​换到转换,然后在转换时需要额外的20秒左右才能切换到计时器。我尝试了各种各样的事情,比如将两个命令放在主线程上,如下所示:

sleep(3);
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
    NSLog(@"Finished sleeping; switching to timer now.\n");
    self.timerView = [[TimerViewController alloc] initWithNibName:@"TimerViewController" bundle:nil];
    [self.view addSubview:self.timerView.view];
}];

或在后台线程上转换到计时器,如下所示:

[self performSelectorInBackground:@selector(transitionToTimer) withObject:nil];

我很茫然。我不知道为什么会这样,这项工作应该在上周完成。对我有什么建议吗?任何人

修改

这是最奇怪的部分:如果我已经在区域1内启动应用程序,它会完美无缺地运行。该应用程序完全符合它的预期。当我走进热点时,它会崩溃或永远切换视图。因此,如果应用程序正在手机上运行FROM Xcode或者当它启动时已经在热点中,它运行正常。如果我独立于xcode运行应用程序并进入热点,它会崩溃或切换视图需要60秒以上。它意识到它应该切换,它只是不会超过60秒。

1 个答案:

答案 0 :(得分:0)

感谢所有帮助我清理视图控制器问题的人。我是一位经验丰富的程序员,但我对Objective-c / cocoa touch的经验不多。无论如何,使用视图控制器建议的操作会以指数方式加速转换。然而,这并没有解决我的主要问题。问题是它需要花费很长时间来加载应用程序,否则它会完全崩溃。我发现问题在于热点正好在我的工作之外,所以当我出去测试它并走进热点时,wifi连接很弱且不稳定,并且正在切换到LTE。在此期间,该应用程序意识到它处于热点,并试图通过NSURL从服务器中提取大量数据,并通过NSJSONSerialization对其进行反序列化。因此,当我走进热点时,它意识到因为它有GPS芯片跟踪手机但是wifi正在切换到蜂窝数据,而应用程序正在尽最大努力从服务器下载数据,但无济于事。无论如何,通过在测试时关闭wifi来解决问题。在路上,我打算建立旨在防止这种混乱事件的保障措施。再次感谢大家的帮助。祝你有个美好的一天。