2012-01-03 11 views
2

iPhoneアプリ開発の初心者 ログイン時に呼び出され、非同期で動作する非同期メソッドを使用して、アプリケーションのさまざまなビューに移動します。 このメソッドは、メインビューのメソッドに影響を与えることなく独立して動作する必要があります。 この方法は、ローカルフォルダ上のファイルのftpをサーバーに実行しています。 私が教えてくれたり、私が参照できるサンプルコードを書いてください。 私はftpとasyncの両方のプロセスを見たいと思っています。おかげさまで iPhoneアプリで非同期メソッド呼び出しを使用しているFTPファイル

+0

すぐに私はちょうどこれを達成するための正しい道を知っておく必要があり、その緊急をご返信ください。.. – Selwyn

+0

uがこのことについて、私はより多くのTELを喜ばことができますか?、私は実際に私がFTPを行いますメソッドを実装したいあなたのポイント – maheswaran

+0

を得るカントこのプロセスはUIの操作には影響しないはずです。あなたが今必要としているものは何ですか?私の問題についてもっと理解が必要です。 – Selwyn

答えて

1

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]; 

を呼び出すことができますし、バックグラウンドスレッドが作成されます、ストリームはその実行ループでスケジュールされ、実行ループが設定され、開始しました:このような何かから呼び出されます 。

最も重要なのは、バックグラウンドスレッドで実行ループの開始である - それなしで、ストリームの実装は作業を開始することはありません...ほとんどがここで、私は実行するために同様のタスクを持っていたところから撮影

upload files in background via ftp on iphone

関連する問題