ローカルデータベースを使用AFnetworking
して保存し、テーブルビューに表示する巨大なデータをダウンロードしています。ダウンロードするデータが少ないと、テーブルはすぐにロードされますが、巨大なデータをダウンロードして保存すると、すべての操作がメインスレッド上にあるため、しばらくスタックします。
ユーザーがアプリを問題なく使用できるように、このすべてのプロセスをバックグラウンドで実行する方法を教えてください。
コード:
-(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);
}];