How can I Cache JSON from API ?
i Fetch the JSON from the API & Parse the JSON data. These can be done with the help of Alamofire & ObjectMapper and this my way to do this this my request function
Alamofire.request(URL(string: baseurl + serviceName) !,
method: .post,
parameters: parameters,
encoding: createEncoding(serviceName: serviceName),
headers: createHeaders(serviceName: serviceName))
.responseJSON {
(response: DataResponse < Any > ) in
if let status = response.response ? .statusCode {
print("URL: \(baseurl + serviceName)")
print("request \(String(describing: NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)))")
let data = response.data
let responseStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) !as String
print("response \(responseStr)")
// String(data: response.request?.httpBody!, encoding: String.Encoding.utf8) as String!
switch (status) {
case 200:
do {
if let jsonArray =
try JSONSerialization.jsonObject(with: data!, options: []) as ? [
[String: AnyObject]
] {
let genericArray = Mapper < RS > ().mapArray(JSONArray: jsonArray)
let arr = [RS](JSONArray: jsonArray)
let base = RS()
base!.genericArray = arr
print(genericArray)
callBack_Handler(base!)
} else if
let genericResponse = RS(JSONString: responseStr) {
callBack_Handler(genericResponse)
}
} catch {
print("Error deserializing JSON: \(error)")
}
and this mapping model function import ObjectMapper
Alamofire.request(URL(string: baseurl + serviceName) !,
method: .post,
parameters: parameters,
encoding: createEncoding(serviceName: serviceName),
headers: createHeaders(serviceName: serviceName))
.responseJSON {
(response: DataResponse < Any > ) in
if let status = response.response ? .statusCode {
print("URL: \(baseurl + serviceName)")
print("request \(String(describing: NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue)))")
let data = response.data
let responseStr = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) !as String
print("response \(responseStr)")
// String(data: response.request?.httpBody!, encoding: String.Encoding.utf8) as String!
switch (status) {
case 200:
do {
if let jsonArray =
try JSONSerialization.jsonObject(with: data!, options: []) as ? [
[String: AnyObject]
] {
let genericArray = Mapper < RS > ().mapArray(JSONArray: jsonArray)
let arr = [RS](JSONArray: jsonArray)
let base = RS()
base!.genericArray = arr
print(genericArray)
callBack_Handler(base!)
} else if
let genericResponse = RS(JSONString: responseStr) {
callBack_Handler(genericResponse)
}
} catch {
print("Error deserializing JSON: \(error)")
}
I will populate the parsed data in the Table View. It works when the user is in Online. How can I cache the data to show it when the user is offline?