メイン UI スレッドでの問題を回避するために、非同期で HTTP ポスト リクエストを行う次のクラスがあります。
@implementation DataFeeder
-(void) doLookup:(NSString *)inputValue
{
NSString *myRequestString = [NSString stringWithFormat:@"val=%@", inputValue];
NSMutableData *myRequestData = [ NSMutableData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ];
NSURL * myUrl = [NSURL URLWithString: @"http://mywebsite/results.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: myUrl];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
[request setTimeoutInterval:10.0];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
responseData = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// Show error message
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// Use responseData
// Got all my response data here, so build up an object ready to send back
}
@end
ViewController
次のコード行を使用して、上記を呼び出しています。
MyObject * myObj = [feeder doLookup:@"SomeStaticStringForNow"];
だから、これは私がそれを理解する方法です:
- は
doLookup
、非同期接続で要求を実行します。 - データが完全にロードされると、呼び出されます
connectionDidFinishLoading
- データの読み込みが完了したら、応答データからオブジェクトを構築し、呼び出し元のコントローラーに送り返します。
呼び出し元のコントローラーにこれをリッスンさせるにはどうすればよいですか? 呼び出しをリッスンし、スピナーを停止して、の内容に基づいて UI を更新する独自のコールバック メソッドを ViewController に実装する必要がありmyObj
ますか?
私が見落としていた本当に簡単な方法があることを願っています...
ありがとう