我正在使用下载大量数据AFnetworking
并将其存储到本地数据库中并显示在 tableview 中,当我下载较少的数据时,表很快加载但是当我下载大量数据并存储它时会卡住一段时间,因为所有操作都在主线程上。
有人可以告诉我如何在后台执行所有这些过程,以便用户可以毫无问题地使用该应用程序。
代码:
-(void) AddRecentCallLogs:(NSDictionary *)args :(NSString * ) type{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if([type isEqualToString:@"dailed"])
{
NSString *phoneNumber=[args objectForKey:@"destination_number"];;
NSString *date=[args objectForKey:@"added_date_time"];
NSString *name=[self getName:phoneNumber];
if(name==NULL)
{
name=@"NOT_FOUND";
}
appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
[appDelegate SetPhoneLogs:name :phoneNumber :date :@"Dailed"];
[self.tableView reloadData];
}
else
{
NSString *phoneNumber=[args objectForKey:@"source_number"];;
NSString *date=[args objectForKey:@"added_date_time"];
NSString *name=[self getName:phoneNumber];
if(name==NULL)
{
name=@"NOT_FOUND";
}
appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
[appDelegate SetPhoneLogs:name :phoneNumber :date :@"Received"];
[self.tableView reloadData];
}
});
}
在其他函数中,我调用了上述方法:
AFJSONRequestOperation *operation1 = [AFJSONRequestOperation JSONRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
resp = [JSON objectForKey:@"result"];
//NSLog(@"%@-- %@",JSON,resp);
self.recent_calllogs = [JSON objectForKey:@"log"];
if(recent_calllogs.count<=0)
[SVProgressHUD dismiss];
for(NSDictionary *info in recent_calllogs)
{
[self AddRecentCallLogs:info :@"received"];
}
NSString *last_record=[JSON objectForKey:@"lastid"];
if(last_record!=NULL)
{
[[NSUserDefaults standardUserDefaults]
setObject:last_record forKey:@"recent-R"];
// NSString *savedValue = [[NSUserDefaults standardUserDefaults]stringForKey:@"recent-R"];
//NSLog(@"saved:%@",savedValue);
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
}];