3

アプリを提出し、数週間前に承認されました。ただし、ピンを追加する重要な機能の 1 つが機能しないという問題がありますが、バージョンのビルドでは機能します。PIN の追加には URL 接続が必要です。アップル開発者から得た回答を見て、私を導いてください。

それはあなたの問題を (少なくとも直接的には) 引き起こすべきではありませんが、一般に、このようなネットワーク コードを UI コード内に置くことは、いくつかの理由で非常に問題があります:

-一般的なアーキテクチャの理由から、これは MVC (モデル ビュー コントローラ) アーキテクチャの大きな違反です。ピン アノテーションは明らかに UI (ビュー) に強く結びついていますが、ネットワークは明らかにバックエンド (モデル) の一部です。

- iOS は応答性を維持するためにメイン スレッドを必要とするため、メイン スレッドに IO または計算を行うコードをアタッチすることは本質的に危険です。それを実行してうまく動作させることはできますが、間違って実行すると必然的にクラッシュにつながります。

4

3 に答える 3

0

1つのオプションは、ピンをドロップすることです(URL接続にまったく関連付けられていません)。ピンがドロップしたら、コールアウトまたは注釈用のデータをロードします(これは私が行っていると想定しています)。いつでも読み込みインジケーターまたはprogressHUDを設定して、ユーザーに何かを待つ必要があることを伝えることができます。必ずしも理想的ではありませんが、データを待つ必要がある場合は、どうしますか?

Appleは、ユーザーがUIをブロックしていることを認識している限り、UIをブロックすることを本当に気にしません。プログレスバーやプログレスHUDのように。ユーザーは、アプリがまだ機能していて何かをしていることを確認できます。何も表示されず、メインスレッド/メインループが戻るのを待っている間にUIがフリーズするだけでは、機能しません。それはただ悪いデザインであり、Appleはおそらくあなたにそれを誹謗中傷するでしょう。

于 2012-12-20T15:00:26.003 に答える
0

NSURLConnectionはバックグラウンドで動作し、UIとの対話はメインスレッドで行う必要があります。

したがって、たとえばconnectionDidFinishメソッドでピンを追加する場合は、次のようにする必要があります。

[mapView performSelectorOnMainThread:@selector(addAnnotation:) withObject:yourAnnotation waitUntilDone:[[NSThread currentThread] isMainThread]];

それがあなたを助けることを願っています。私は窓から書きましたが、線はうまくいくはずです。

于 2012-12-19T18:17:34.187 に答える
0

あなたが何を達成しようとしているのか正確にはわかりません。メイン スレッドで URL を直接取得しているため、App 関係者は不満を言っていますか? URL を取得する方法を示すコード スニペットを送っていただけますか?

于 2012-12-20T14:27:31.427 に答える