代码之家  ›  专栏  ›  技术社区  ›  Katushai

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

  •  0
  • Katushai  · 技术社区  · 11 年前

    我将在这篇文章中尽可能多地介绍细节,因为我完成这项任务非常重要,我不知道为什么我会得到这些奇怪的结果。所以,它开始了。

    我有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 回复  |  直到 11 年前
        1
  •  0
  •   Katushai    11 年前

    感谢所有帮助我解决视图控制器问题的人。我是一名经验丰富的程序员,但我对objective-c/可可触摸几乎没有经验。无论如何,使用视图控制器执行建议的操作会以指数级的速度加速转换。然而,这并没有解决我的主要问题。问题是加载应用程序需要很长时间,否则就会完全崩溃。我发现问题在于热点就在我工作之外,所以当我出去测试并走进热点时,wifi连接很弱,不稳定,正在切换到LTE的过程中。在此期间,该应用程序意识到自己处于热点,并试图通过NSURL从服务器中提取大量数据,并通过NSJSONSerialization对其进行反序列化。因此,当我走进热点时,它意识到了这一点,因为它有GPS芯片来跟踪手机,但无线网络正在切换到蜂窝数据,应用程序正在尽最大努力从服务器下载数据,但没有成功。无论如何,这个问题已经通过在测试时关闭wifi得到了解决。今后,我打算建立旨在防止这种混乱事件发生的保障措施。再次感谢大家的帮助。祝您今天过得愉快。