我的代碼調用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