насколько я понимаю, вы хотите загрузить что-то с iphone на сервер в фоновом потоке?тем не мение;загрузка в фоновом потоке должна быть очень похожей.
Во-первых, я предлагаю вам создать метод, который выполняет основную работу за вас:
- (void) createRessource {
NSURL *destinationDirURL = [NSURL URLWithString: completePathToTheFileYouWantToUpload];
CFWriteStreamRef writeStreamRef = CFWriteStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) destinationDirURL);
ftpStream = (__bridge_transfer NSOutputStream *) writeStreamRef;
BOOL success = [ftpStream setProperty: yourFTPUser forKey: (id)kCFStreamPropertyFTPUserName];
if (success) {
NSLog(@"\tsuccessfully set the user name");
}
success = [ftpStream setProperty: passwdForYourFTPUser forKey: (id)kCFStreamPropertyFTPPassword];
if (success) {
NSLog(@"\tsuccessfully set the password");
}
ftpStream.delegate = self;
[ftpStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
// open stream
[ftpStream open];
}
Этот метод составляет одну треть работы:это будет называться в фоновом режиме.Вызывается из чего-то вроде этого:
- (void) backgroundTask {
NSError *error;
done = FALSE;
/*
only 'prepares' the stream for upload
- doesn't actually upload anything until the runloop of this background thread is run!
*/
[self createRessource];
NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
do {
if(![currentRunLoop runMode: NSDefaultRunLoopMode beforeDate: [NSDate distantFuture]]) {
// log error if the runloop invocation failed
error = [[NSError alloc] initWithDomain: @"org.yourDomain.FTPUpload"
code: 23
userInfo: nil];
}
} while (!done && !error);
// close stream, remove from runloop
[ftpStream close];
[ftpStream removeFromRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
if (error) {
// handle error
}
/* if you want to upload more: put the above code in a lopp or upload the next ressource here or something like that */
}
Теперь вы можете вызвать
[self performSelectorInBackground: @selector(backgroundTask) withObject: nil];
, и для вас будет создан фоновый поток, поток будет запланирован в цикле выполнения, а цикл запуска -настроен и запущен.
Наиболее важным является запуск runloop в фоновом потоке - без него реализация потока никогда не начнет работать ...
в основном взято отсюда, где я имеланалогичное задание для выполнения: загрузка файлов в фоновом режиме через ftp на iphone