"SimpleFTPSample"を使用して、デリート情報のリストをftpリクエストします。コードの一部は以下の通りである:私もTIMEOUTFTP後networkStreamを停止するようにNSTimerを設定ftpリクエストの完了を待つ方法、次にプログラムを続ける
- (void)_startReceive
{
......
self.networkStream = (NSInputStream *) ftpStream;
self.networkStream.delegate = self;
[self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[NSTimer scheduledTimerWithTimeInterval:TIMEOUTFTP target:self
selector:@selector(dealTimeOut:) userInfo:nil repeats:NO];
......
}
要求は、私が定義TIMEOUTFTP内正しく終了した場合、networkStreamも閉じられます。私はこのような別の場所での方法を使用:
- (void)downLoadData
{
NSArray* receivedData;
[ftpService _startReceive];
//wait until the network is closed
while (ftpService.isReceiving) {}
receivedData = ftpService.dataArray;
if([receivedData count] == 0) {
NSLog(@"no data get");
}
else {
NSLog(@"get data number %d", [receivedData count]);
}
}
状況は、プログラムが "(ftpService.isReceiving){}、一方" で立ち往生することです。私は複数のスレッドに精通していません。私は実行ループを正しく理解していないかもしれません。誰かがなぜこれが起こり、私の目的を達成する方法を教えてもらえますか?
ありがとうございます!あなたのコードは単語です。しかし、私はあなたが私に言いたいことを理解できません。私は、実行ループについてもっと知るべきだと思います。 – itenyh
実際には、これはサーバーからデータをロードするための2番目のスレッドにあります。このようなことがひどい結果につながるでしょうか? – itenyh
バックグラウンドスレッドでは、データの待機をブロックすることはできます。あなたは私が示したコードを使用することができます。 (APIは非同期の使用をサポートしているので、通常は別のスレッドを使用する必要はありませんが、問題ありません)。実行ループについて詳しく知りたい場合は、[Appleのドキュメント](https://developer.apple.com/library) /ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html)。 –