я пытаюсь установить FTP-соединение в приложении. я хочу загрузить несколько файлов на FTP-сервер, все файлы в одном каталоге. Итак, сначала я хочу создать удаленный каталог.
- (void) createRemoteDir {
NSURL *destinationDirURL = [NSURL URLWithString: uploadDir];
CFWriteStreamRef writeStreamRef = CFWriteStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) destinationDirURL);
assert(writeStreamRef != NULL);
ftpStream = (__bridge_transfer NSOutputStream *) writeStreamRef;
BOOL success = [ftpStream setProperty: ftpUser forKey: (id)kCFStreamPropertyFTPUserName];
if (success) {
NSLog(@"\tsuccessfully set the user name");
}
success = [ftpStream setProperty: ftpPass forKey: (id)kCFStreamPropertyFTPPassword];
if (success) {
NSLog(@"\tsuccessfully set the password");
}
ftpStream.delegate = self;
[ftpStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
// open stream
[ftpStream open];
}
Этот код не работает при выполнении в фоновом потоке с использованием следующего вызова:
[self performSelectorInBackground: @selector(createRemoteDir) withObject: nil];
Я предполагаю, что цикл выполнения (фоновых потоков) не работает? Если я отправлю сообщение внутри основного потока, загрузка будет работать нормально:
[self createRemoteDir];
поскольку цикл выполнения основного потока запущен и работает.
но будут загружены довольно большие файлы; поэтому я хочу поместить эту рабочую нагрузку в фоновый поток. но как и где мне настроить NSRunLoop, чтобы вся загрузка происходила в фоновом потоке? Документация Apple по NSRunLoops (особенно как их запускать без использования таймера/источника ввода, как в этом случае) мне не помогла.