我使用「SimpleFTPSample」來執行ftp請求以列出有關信息。該部分代碼如下:如何等待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];
......
}
我還設置了的NSTimer TIMEOUTFTP後停止的NetworkStream中,也的NetworkStream將被關閉,如果該請求被內TIMEOUTFTP我定義正確完成。我使用的方法在另一個地方是這樣的:
- (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){}」。我不熟悉Multiple Thread。可能是我不正確地理解運行循環。有人能告訴我爲什麼會發生這種情況,以及如何達到我的目的?
謝謝!你的代碼做的話。但我不明白你想告訴我什麼。我想我應該更多地瞭解運行循環。 – itenyh
實際上,這是在第二個線程從服務器加載數據。這樣做會導致可怕的結果嗎? – itenyh
在後臺線程上,可以阻止等待數據。你可以使用我展示的代碼。 (通常不需要使用單獨的線程,因爲API支持異步使用,但是沒問題。)如果您想了解有關運行循環的更多信息,請參閱[Apple的文檔](https://developer.apple.com/library /ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html)。 –