何やらタイトルが長くなってしまいましたが、複合的な内容なのでこうなりました。
今回やりたかったことはタイトルの通りですが、分解すると…
1)WEBからデータをダウンロード
2)バックグラウンドで処理を実行
3)JSONデータを解析
4)解析したデータをRealmに挿入
以上の4つです。
エラーが出なくなるまでかなり苦労したのですが、一番の原因は日本語の扱いに関する部分ですので、
日本語を含まないデータの解析だけならすんなり可能ではないかと思います。
1)WEBからデータをダウンロード
WEBからデータをダウンロードするにはURLSessionを使います。
ダウンロードするURLを指定
let url: String = "http://www.exam.jp/json.php"
セッションを作成します。
let session = URLSession(configuration: URLSessionConfiguration.default)
タスクを登録します。
let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: {
(data, response, error) in
if let urlContent = data {
// ここに処理を記述
}
})
作成したタスクを実行します。
task.resume()
2)バックグラウンドで処理を実行
バックグラウンドで処理を実行するには、GCD(Grand Central Dispatch)を使用します。
DispatchQueue.global().async {
// バックグラウンドスレッドでの処理を記述
}
asyncだと非同期処理、syncだと同期処理になります。
続きを読む…»