まず第一に、コードを保存するための新しいスレッドを作成し、NSUrlConnection を非同期的に使用しています。独自の実装の NSUrlConnection は、別のスレッドをスピンオフし、新しく作成したスレッドにコールバックしますが、これはほとんどあなたがしようとしていることではありません。保存中にUIがブロックされないようにしようとしているだけだと思います...
NSUrlConnection には、スレッドでブロックする同期バージョンもあります。何かを行うために独自のスレッドを起動する場合は、それを使用することをお勧めします。サインは
+ sendSynchronousRequest:returningResponse:error:
その後、応答が返ってきたら、UI スレッドにコールバックできます。以下のようなものが動作するはずです:
- (void) beginSaving {
// This is your UI thread. Call this API from your UI.
// Below spins of another thread for the selector "save"
[NSThread detachNewThreadSelector:@selector(save:) toTarget:self withObject:nil];
}
- (void) save {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// ... calculate your post request...
// Initialize your NSUrlResponse and NSError
NSUrlConnection *conn = [NSUrlConnection sendSyncronousRequest:postRequest:&response error:&error];
// Above statement blocks until you get the response, but you are in another thread so you
// are not blocking UI.
// I am assuming you have a delegate with selector saveCommitted to be called back on the
// UI thread.
if ( [delegate_ respondsToSelector:@selector(saveCommitted)] ) {
// Make sure you are calling back your UI on the UI thread as below:
[delegate_ performSelectorOnMainThread:@selector(saveCommitted) withObject:nil waitUntilDone:NO];
}
[pool release];
}