2012-02-24 10 views
3

のように私は、実行しようとしたり、URLを要求し、デapplicationWillTerminateイベントの内部が、私はそれを行う際に、他の機能れて:彼らは実行されませんURL applicationWillTerminate客観C

- (NSURLRequest *)connection:(NSURLConnection *)connection 
      willSendRequest:(NSURLRequest *)request   redirectResponse:(NSURLResponse *)redirectResponse { 
    [baseURL autorelease]; 
    baseURL = [[request URL] retain]; 
    return request; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [responseData appendData:data]; 
} 

私は推測します、これは、最後に実行された関数またはイベントがapplicationWillTerminateであるためです。到達する方法やそれをする方法はありますか?

答えて

0

あなたがこれを取り除くことができたなら、私は本当に非常に驚くでしょう。 applicationWillTerminateは横たわっていません!もちろん、リクエストを設定して送信することもできますが、そのメソッドが返すと、デリゲートがコールバックを受信して​​応答するのに十分な長さにぶら下がることはありません。

おそらく、あなたが必要とするものを達成するための別の方法を見つける必要があると思います。

+0

私はすでに、デバッグ、コード、私はアプリに入力したとき、(ログイン)がURLを実行し、ログアウトその出口についてサーバーにアドバイスしてから、プロセスが停止しました。それは正しく動作します。この問題は、私がログアウトしたurlを実行するとき、urlを実行するメソッドが実行されないときに、applicationWillTerminateでこれを実行しようとするときに始まります。 –

0

AppleのドキュメントapplicationWillTerminate delegate method for UIApplicationには、このメソッドの実装にはタスクを実行して戻るまでに約5秒かかることが記載されています。ネットワークを使用し、不定期に実行されるメソッドを呼び出すと、メソッドの意図に違反しているようです。

+0

私は、これを行うには、私は、ログを取得するサーバーを知っている必要があります、私はURLを実行する必要があります。どうもありがとう。 –

+0

Appleのドキュメントによれば、デリゲートベースのネットワーク通信は使用しないでください。したがって、データの取得や認証などの複雑なトランザクションを伴わない一方向ネットワークトラフィックを送信する別の方法を考え出すことができます。どのようなサーバーですか? – bneely

+0

アドバイスをいただきありがとうございます。使用しているサーバーの種類を確認してください。つまり、サーバーの種類を確認するにはどうすればいいですか? –

0

この時点で便利なテクニックは、「次の起動時にこのURLリクエストを実行する必要がある」というフラグを保存することです。次に、アプリケーションが次回起動されたときに、フラグがtrueの場合は、URLリクエストを実行します。それはあらゆる状況に適しているとは言えませんが、実行するのに十分な時間があるという利点があります。

+0

実際には、私はすでにユーザーがログインを取得したときにURLを実行していましたが、問題はあなたがアプリケーションスレッドを入力しようとしない場合、ハングアップします。 –

1

私は昨日と同じ問題に直面して、以下のコードのスニペットを使用して、それを解く:

NSURLResponse* response = nil; 
NSString* requestUrlString = <your URL>; 
NSMutableURLRequest *syncRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestUrlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; 
[NSURLConnection sendSynchronousRequest:syncRequest returningResponse:&response error:nil];