我目前有一个带有 2 张桌子的屏幕。我正在同步获取数据并将其放在屏幕上。代码类似于:viewController.m
DBAccess_Error_T = [getList:a byCompanyID:1];
DBAccess_Error_T = [getList:b byCompanyID:2];
[self putListAOnScreen];
[self putListBOnScreen];
数据库访问.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
}
我现在正试图将其切换为异步,我正在苦苦挣扎。即使有网站教程和文档也很难。
由于我所有的数据库实用程序都位于与 viewController 不同的文件中,因此我不确定如何使用 didReceiveData 和 didReceiveResponse 处理程序。另外,由于我有 2 个数组来填充我的 2 个表,我如何区分 didReceiveData 中的差异?
相反,我现在要做的是使用 sendAsynchronousRequest,但似乎我需要为每个发送函数创建一个解包函数......让我知道我是否离开这里......它看起来像:
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 函数?函数指针是正确的方法吗?这种方法是否可行?任何提示将非常感谢!