1

Mac/iPhone 用の GData ObjC クライアントを介して Google スプレッドシートにアップロードするアプリがあります。そのままで問題なく動作します。独自のスレッドでアップロード部分を取得しようとしていますが、新しいスレッドでアップロード メソッドを呼び出そうとしています。

見て:

-(void)establishNewThreadToUpload {
    [NSThread detachNewThreadSelector:@selector(uploadToGoogle) toTarget:self withObject:nil];
}

-(void)uploadToGoogle {
    NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
    //works fine
    [helper setNewServiceWithName:username password:password];
    //works fine
    [helper fetchUserSpreadsheetFeed];
    //inside the helper class, fetchUserSpreadsheet feed calls ANOTHER method, which
    //calls ANOTHER METHOD and so on, until the object is either uploaded or fails
    //However, once the class gets to the end of fetchUserSpreadsheetFeed
    //control is passed back to this method, and
    [pool release];
    //is called.  The thread terminates and nothing ever happens.
}

別のスレッドを使用することを忘れた場合、すべてが想定どおりに機能します。私はスレッド プログラミングに慣れていないので、不足しているものがあれば教えてください。

ありがとう!

4

2 に答える 2

0

私はこの問題を抱えており、解決策がありますが、解決策は機能するのでうんざりしますが、何かにおいがします...彼らはより良い方法であるべきだと思われます.

[helper fetchUserSpreadsheetFeed] 内のどこかで、なんらかの形式の NSURLConnection を使用していると思われます。非同期の http 要求 (コールバック関数などのデリゲートをセットアップする場所) を使用している場合、接続がそれらのコールバック関数を呼び出す機会を得る前にスレッドが終了し、サイレントに失敗する可能性があります。コールバックが「終了」変数をYESに設定するまでスレッドを存続させる私の解決策は次のとおりです。(私はまた、これらのテキスト ボックスにコードを投稿するのに問題があるようです。そのため、編集作業を実行している天使が私を助けてくれれば、それは素晴らしいことです!)

- (void)fetchFeed {
//NSLog(@"making request");
[WLUtilities makeHttpRequest:self.feedUrlString withHttpHeaders:nil withDelegate:self];

//block this thread so it's still alive when the delegates get called
while(!finished) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

}

この解決策の問題点は、while ループを回すのは一般的に良い方法ではないということです。ランループ ビジネスの性質についてはよくわかりませんが、適切にスリープしている可能性もありますが、よくわかりません。

とにかく、それを試してみて、何が起こるか見てみましょう!

注: 私の「WLUtilities」関数は、非同期 http 要求を作成するための NSURLConnection 関数の単なるラッパーです。あなたが試すかもしれない別の解決策は、単に同期要求を使用することですが、非同期呼び出しは接続をより細かく制御できるため、この解決策もあまり好きではありません。

于 2010-05-29T06:12:30.613 に答える
0

この回答のテクニックを使用してください。

iPhone で写真をサーバーにアップロードするにはどうすればよいですか?

于 2010-05-29T08:11:31.233 に答える