0

現在、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 関数を呼び出すにはどうすればよいですか? 関数ポインタはこれを行う正しい方法ですか? このアプローチは途方もないですか?どんなヒントでも大歓迎です!

4

1 に答える 1