我的代码调用HTTP
后调用远程服务器,并获得JSON
格式的结果,我已经提取了这个JSON,但现在我需要将这些结果存储到SQLite。根据我的阅读NSURLSessionDataTask
是后台线程,所以我的困惑是,我应该打开SQL调用并插入completionHandler
(或)是否有任何其他最佳做法来处理这种类型的需求?将NSURLSessionDataTask响应存储到SQLite数据库?
编辑1
我奋力更多的一点是,它是有效的写“completionHandler”里面的SQLite操作? “completionHandler”会被视为单独线程(正在执行SessionDataTask)还是主线程的方法?
EDIT 2
我打开CoreData相关的解决方案了。
任何帮助,将不胜感激。
NSURL *loginUrl = [NSURL URLWithString:@"myurl"];
NSURLSession *session = [NSURLSession sharedSession];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:loginUrl];
request.HTTPMethod = @"POST";
NSString *ipData = [NSString stringWithFormat:@"uName=%@&pwd=%@",self.userName.text,self.userPwd.text];
request.HTTPBody = [ipData dataUsingEncoding:NSUTF8StringEncoding];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *jsonError) {
NSLog(@"Inside post data task......");
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse *)response;
if(httpResp.statusCode == 200)
{
NSLog(@"Response succesfull.........");
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
if(!jsonError)
{
//No Json error
NSString *uName = jsonDict[@"userName"];
NSString *uID = jsonDict[@"uID"];
//HOW CAN I INSERT THESE DETAILS TO SQLITE DB BEFORE CALLING SEGUE TO MOVE TO NEXT SCREEN?
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"mysegueID" sender:self];
});
}
}else
{
NSLog(@"Response is not succesfulll...");
}
}];
[postDataTask resume];
只是为了澄清,直接SQL而不是CoreData是你想要的,对吧? (另外,为什么?) – RobP 2014-12-11 16:41:43
感谢您的问题! 1)我是iOS开发新手(来自Android背景),所以SQLite的SQL查询对我来说更容易。 2)我的应用程序不是SQLite密集型的,换句话说,只有一次插入数据,剩余时间只读。希望它是有道理的。 – kosa 2014-12-11 16:51:05
当然,即使对于简单的SQL使用情况,CoreData也有一些优势。我发现这个链接有助于解释原因。迁移到未来的架构版本就是它为您处理好的一个例子。 http://sealedabstract.com/code/you-should-use-core-data/ – RobP 2014-12-11 17:06:19