Я начал свое путешествие по iOS всего 2 недели назад, и на данный момент я столкнулся с кирпичной стеной, мне нужно сохранить ответы API непосредственно в CoreData. В настоящее время я должен зациклить свой объект после Decoded, чтобы я мог вывести значения по отдельностии сохраните их.
Есть ли способ, которым я могу сделать это без зацикливания вообще?
Позвольте мне показать вам, что я уже сделал ниже:
У меня есть свои структурыназван в качестве примера:
struct Example: Codable {
let data:[MyDataClass]
enum CodingKeys: String, CodingKey {
case data
}
}
struct MyDataClass: Codable {
let name: String
let age: String
let gender: String
enum CodingKeys: String, CodingKey {
case name
case age
case gender
}
}
У меня также есть мой код URLSession ниже:
let parameters = ["page": 1] as [String : Any]
let jsonData = try? JSONSerialization.data(withJSONObject: parameters)
let url = URL(string: "http://example.com")
var request = URLRequest(url: url!)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST" //set http method as POST
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) {(data, response, error) in
guard error == nil else {
print("returning error")
return
}
guard let content = data else {
print("not returning data")
return
}
do {
if let httpResponse = response as? HTTPURLResponse {
if(httpResponse.statusCode == 200){
let decoded = try JSONDecoder().decode(Example.self, from: content)
// Currently I am looping the data and saving it,
// But I want to save it directly with JSON.
let list = decoded.data.MyDataClass
if(!list.isEmpty){
for index in 0...list.count-1 {
// call save method here
}
}
}
}
} catch {
print("Got an Error", error.localizedDescription)
}
}
task.resume()
У меня также есть метод ниже, который фактически сохраняет мои данные, когда я LOOP.
func saveMyList(name: String,
age: Int,
gender: String) {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "ExampleEntity", in: managedContext)!
let myList = NSManagedObject(entity: entity, insertInto: managedContext)
myList.setValue(name, forKeyPath: "name")
myList.setValue(age, forKeyPath: "age")
myList.setValue(gender, forKeyPath: "gender")
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save list. \(error), \(error.userInfo)")
}
}
Я новичок в этом, поэтому никакая информация не нужна, пожалуйста.Мне нужен кто-то, чтобы направить меня в правильном направлении. Большинство учебных пособий, которые я вижу в Интернете, либо слишком продвинуты, либо делают что-то другое.