このタスクを達成することは非常に重要であり、なぜこれらの奇妙な結果が得られるのかわからないため、この投稿にできるだけ詳細を記載しようと思います。それで、ここに行きます。
5 つのビュー コントローラー/.xib ファイルがあります。また、各 .h/.m ファイルに位置情報の更新を提供するように設計された appdelegate と LocationManager シングルトン クラスもあります。WelcomeView と呼ばれるビュー コントローラー 1 は、場所の更新のデリゲートです。そのため、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 秒以上切り替えていません。