現在、2 つのテーブルを含む画面があります。データを同期して取得し、画面に表示しています。コードは次のようになります: viewController.m
DBAccess_Error_T = [getList:a byCompanyID:1];
DBAccess_Error_T = [getList:b byCompanyID:2];
[self putListAOnScreen];
[self putListBOnScreen];
DBAccess.m
+ (DBAccess_Error_T)getList:(NSMutableArray*)a byCompanyID:(NSInteger)cID
{
// Pack this up in JSON form
[self queryDB:postData];
// Unpack and put it into variable a
}
+ (id)queryDB:(id)post
{
// Send request
// Get back data
}
私は今、これを非同期に切り替えようとしていますが、苦労しています。Web サイトのチュートリアルやドキュメントでも大変でした。
すべてのデータベース ユーティリティが viewController とは別のファイルにあるため、didReceiveData および didReceiveResponse ハンドラをどのように使用できるかわかりません。また、2 つのテーブルを埋める 2 つの配列があるため、didReceiveData の違いをどのように区別すればよいでしょうか?
代わりに、私が今やろうとしているのは sendAsynchronousRequest を使用することですが、すべての send 関数に対して unpack 関数を作成する必要があるようです...ここから離れている場合はお知らせください...次のようになります:
viewController.m は同じままです
DBAccess.m
+ (DBAccess_Error_T)getList:(NSMutableArray*)a byCompanyID:(NSInteger)cID
{
NSDictionary *post = /*blah blah*/
[self queryDB:post output:(a)];
}
+ (id)queryDB:(id)post output:(id)output
{
NSError *error;
NSData *jsonPayload = [NSJSONSerialization dataWithJSONObject:post options:NSJSONWritingPrettyPrinted error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:jsonPayload];
[NSURLConnection sendAsynchronousRequest:request
queue:[[NSOperationQueue alloc] init]
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *error)
{
if ([data length] >0 && error == nil)
{
[self unpackDataForList:output data:data]; // This function needs to be different depending on which function called queryDB...the data will be unpacked in a different way
}
}
}
+ (void)unpackDataForList:(id)output data:(NSData*)data
{
// Do my unpacking here and stick it into 'output'.
}
別の unpackData 関数を呼び出すにはどうすればよいですか? 関数ポインタはこれを行う正しい方法ですか? このアプローチは途方もないですか?どんなヒントでも大歓迎です!