「SimpleFTPSample」を使用して、ディレクトリ情報を一覧表示するための 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 を停止するように NSTimer を設定しました。定義した 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]);
}
}
状況は、プログラムが「while (ftpService.isRecoming) {}」でスタックすることです。私はマルチスレッドに慣れていません。実行ループを正しく理解していない可能性があります。なぜこれが起こるのか、そして私の目的を達成する方法を教えてもらえますか?