Ну, во-первых, вы оба создаете новый поток для своего кода сохранения и затем асинхронно используете NSUrlConnection. NSUrlConnection в своей собственной реализации также выделил бы другой поток и перезвонил бы вам на ваш недавно созданный поток, который по большей части не то, что вы пытаетесь сделать. Я предполагаю, что вы просто пытаетесь убедиться, что ваш интерфейс не блокируется во время сохранения ...
NSUrlConnection также имеет синхронную версию, которая будет блокировать ваш поток, и было бы лучше использовать ее, если вы хотите запустить собственный поток для выполнения каких-либо действий. Подпись
+ sendSynchronousRequest:returningResponse:error:
Затем, когда вы получите ответ, вы можете перезвонить в ваш поток пользовательского интерфейса. Должно работать что-то вроде ниже:
- (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];
}