0

このタスクを達成することは非常に重要であり、なぜこれらの奇妙な結果が得られるのかわからないため、この投稿にできるだけ詳細を記載しようと思います。それで、ここに行きます。

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 秒以上切り替えていません。

4

1 に答える 1

0

View Controllerの問題を解決するのを手伝ってくれたみんなに感謝します。私は経験豊富なプログラマーですが、objective-c/cocoa touch の経験はほとんどありません。とにかく、View Controllerで提案されたことを実行すると、遷移が指数関数的に高速化されました. しかし、それは私の主な問題を解決しませんでした。問題は、アプリの読み込みに非常に長い時間がかかるか、完全にクラッシュすることでした。ホットスポットが私の仕事のすぐ外にあることが問題であることがわかったので、テストに出かけてホットスポットに足を踏み入れたとき、Wi-Fi 接続は弱く不安定で、LTE に切り替えている途中でした。その間、アプリは自分がホットスポットにあることを認識し、NSURL を介してサーバーから大量のデータを取得し、NSJSONSerialization を介してそれを逆シリアル化しようとしていました。それで、私がホットスポットに入ったとき、GPSチップが電話を追跡しているが、wifiがセルラーデータに切り替えられており、アプリがサーバーからデータをダウンロードするのに一生懸命努力していたために実現しましたが、役に立ちませんでした. とにかく、今のところテスト中にwifiをオフにすることで問題は解決しました。将来的には、この種の厄介なイベントから保護するように設計されたセーフガードを組み込むつもりです。みんなの助けに感謝します。良い一日を過ごしてください。

于 2013-09-12T17:55:52.857 に答える