0

我将尝试在这篇文章中提供尽可能多的细节,因为完成这项任务非常重要,我不知道为什么我会得到这些奇怪的结果。所以,就这样吧。

我有 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 内启动应用程序,它会完美运行。该应用程序完全按照它应该做的。当我走进热点时,它会崩溃或永远切换视图。因此,如果该应用程序正在手机上从 Xcode 上运行,或者当它启动时我已经在热点中,它运行良好。如果我独立于 xcode 运行应用程序并走进热点,它会崩溃或切换视图需要 60 多秒。它意识到它应该切换,它只是在 60 多秒内没有这样做。

4

1 回答 1

0

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

于 2013-09-12T17:55:52.857 回答