2012-04-21 23 views
2

これは私が直面している問題です。私が構築しているアプリケーションの特定の部分は、さまざまなサーバー/サービスへの接続を可能にするいくつかのcネットワークソケットを開きます。ただし、アプリケーションがスリープ状態になると、これらのソケット接続は失われ、再ロードしようとするとエラーが発生します。だから私がやりたいことは基本的には、アプリケーションの再起動時にユーザに通知し、アプリケーションを再起動する必要があるということです。主な質問は、私のアプリケーションが拒否されることなくexit(0)を使ってアプリケーションを終了させるボタンでそれらを表示できますか?ユーザーのリクエストに応じてiOSアプリを強制終了

アップルは、アプリが死んだときをユーザーがコントロールする必要があると言います。この場合、私はそれがわかりますが、アップルの意見は分かりません。他の誰かがこれを使いましたか?あなたはこれで拒否されましたか?アドバイスを事前にありがとう!

EDIT:

あなたのアドバイスのために皆に感謝します。私はすべてを考慮に入れようとしていますが、アプリケーションをできるだけ早く提出する必要があるため、上記の解決策が拒否されるかどうかを知る必要があります。

+0

アプリをバックグラウンドで実行できないようにしましたか?その後、ユーザーがホーム画面を終了するたびに殺されます。これは少し攻撃的かもしれませんが、問題を解決するでしょう。 – PengOne

+0

バックグラウンドでの実行を許可するにはどうすればよいですか?これは単純なものですか?そして、リンゴは実際にこれを拒絶されることなく許可していますか? – MZimmerman6

+1

私はバグとして再起動する必要があるという事実を知っておくべきだと思います。あなたは本当にバックグラウンドに行くと再びアプリに対処することができる必要があります。 – mattjgalloway

答えて

1

「iOSアプリケーションを正常に終了するためのAPIはありません。 Technical Q&A QA1561 How do I programmatically quit my iOS application?を参照してください。

スマートにするには、アプリを終了してソケットをクリーンアップするのと同じように、releaseの代わりにアプリを強制終了してメモリ管理を行うのと同じです。

+0

-1:アプリを正常に終了するための公開されたAPIペアがあり、多くのアプリがそれを行います。 UIApplicationExitsOnSuspend plistキーを使用してアプリケーションを構築し、正当で有用なURLをSafariに送信させるようにします。あなたのアプリは終了します。 – hotpaw2

+0

私はそれがまったく優雅な方法ではないことを知っています。それは時間制約の問題です。私はこれをきれいにするためにアプリケーションを終了しなければならないと私は満足しているとは思わない。 – MZimmerman6

0

ユーザーにアプリケーションを終了するように指示するモーダルビューコントローラーを起動する方法はありますか?このビューコントローラを解除ボタンなしで作成できるため、ユーザーはアプリを強制終了する必要があります。

+0

これは私が今やっていることですが、これでアプリが拒否されるかどうかわかりません。これはクラッシュのように見えるかもしれませんが、彼らは "キルアプリ"と呼ばれるボタンを押しています。私はそれが明らかだと思うが、Appleの見通しについては不明である – MZimmerman6

+1

いいえ、それは拒否されません。 AppleGuidelinesは、プログラムでプログラムを終了させることを防ぐものではありません。私はAppStoreにある私のアプリの一つでやっています。 – Niko

3

アプリをバックグラウンドで実行できないようにしましたか?その後、ユーザーがホーム画面を終了するたびに殺されます。これは少し攻撃的かもしれませんが、問題を解決するでしょう。

「あなたはそれが終了したとき アプリケーションがバックグラウンドのままにしたくない場合は、明示的にUIApplicationExitsOnSuspendキーを追加することによって、バックグラウンド実行 モデルのオプトアウトすることができます:Appleの選ぶバックグラウンド実行のうちから、あなたの アプリケーションのInfo.plistファイルとYESにその値を設定する。

は、アプリケーションが動作していない、 非アクティブ、およびアクティブ状態の間のそれのサイクル、オプトアウト、背景や 一時停止状態に入ったことがないとき。

ユーザーがホームボタンをタップしてアプリケーションを終了すると、アプリケーション代理人の applicationWillTerminate:メソッドが と呼び出され、アプリケーションが終了するまでに約5秒間が終了し、終了する前に 終了すると、アプリケーションは実行されない状態に戻ります状態。"

も参照してください:重要なイベントは、アプリケーションの寿命に影響する場合How to prevent my app from running in the background on the iPhone

4

アプリケーションデリゲートは通知を受け取ります。ユーザーにセッションの再作成を依頼するのではなく、ネットワーク操作を中断してから、アプリケーションのライフサイクルの適切な時期に自動的に再開するようにしてください。

アプリケーションは、アプリケーションデリゲートでコールバックを経由して背景を終了するか、または入力するための準備として、あなたは優雅な場所の任意の数の(とりわけ)ネットワークソケットを殺すことができる:

applicationWillResignActive: 
applicationWillEnterBackground: 
applicationWillTerminate: 

は、潜在的にソケットを再構築

+0

既にこれを試してみましたが、何らかの理由でこれらのソケットが正しく再構築されることを望んでいません。私たちは、アプリがスリープ状態になると、スリープ状態からスリープ状態に戻るため、実際にWi-Fiネットワークへの接続が失われていることが問題だと思います。そして、アプリケーションが再開すると、applicationDidBecomeActiveと同様に、電話が再びアクティブになった瞬間に、その再起動を呼び出すと、そのWiFiネットワークへの完全な接続はありません – MZimmerman6

+1

あなたはネットワークを解体できないと言っていますアプリケーションを強制的に再起動しないでセッションを終了しますか?私は、あなたが必要に応じてネットワークサービスを有効または無効にするために、離れた場所を見つけてみることが、ユーザーを再起動させるよりも優れたソリューションだと思います。 – isaac

+0

私たちはそれをしようとしていますが、いくつか問題があります。すぐにこのアプリケーションが必要なので、実際にこの作業を行うには時間的な制約があります。だから私たちの失敗セーフは、ユーザーの承認を得てアプリを殺すだけです。私はちょうどアップルがこれを許可するかどうかを知りたい。 – MZimmerman6

関連する問題