我将尝试在这篇文章中提供尽可能多的细节,因为完成这项任务非常重要,我不知道为什么我会得到这些奇怪的结果。所以,就这样吧。
我有 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 多秒内没有这样做。