Я хочу проанализировать строки JSON с разных URL-адресов в моем приложении панели вкладок iOS:
- Parsing.swift
- FirstViewController.swift (начальный контроллер представления панели вкладок)
- SecondViewController.swift
- ...
В Parsing.swift у меня есть различные схемы struct (TopLevel) и enum Я контролировал в детской площадке: они работают отлично.В каждом ViewController у меня есть табличное представление, которое я хочу отобразить с результатами разного анализа JSON.Это мой упрощенный код:
FirstViewController.swift viewDidLoad ()
let url = // my first URL to parse
let urlObj = URL(string: url)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: urlObj!) { (data, response, error) in
do {
let results = try JSONDecoder().decode(TopLevel.self, from: data!)
... for ...
self.table.reloadData()
}
catch {
...
}
}
task.resume()
Этот код работает идеально : при первом открытии приложения, таблицаПредставление в FirstViewController отображается с результатами анализа JSON из URL.Но теперь пришло время щелкнуть по второму элементу панели, чтобы открыть SecondViewController.Код, очевидно, выглядит так:
SecondViewController.swift viewDidLoad ()
let url2 = // my second URL to parse
let urlObj2 = URL(string: url2)
let config2 = URLSessionConfiguration.default
let session2 = URLSession(configuration: config2)
let task2 = session.dataTask(with: urlObj2!) { (data2, response2, error2) in
do {
let results2 = try JSONDecoder().decode(TopLevel.self, from: data2!)
... for ...
self.table2.reloadData()
}
catch {
...
}
}
task2.resume()
Хорошо, когда я нажимаю на второй элемент панели вкладок, чтобы открыть SecondViewController, представление таблицы'popolate и XCode выдает error : dataCorrupted (Swift.DecodingError.Context (codingPath: [], debugDescription: "Указанные данные не были действительными в формате JSON.", underError: Необязательно (Ошибка домена)= NSCocoaErrorDomain Code = 3840 "Текст JSON не начинался с массива или объекта и опция, позволяющая не устанавливать фрагменты." UserInfo = {NSDebugDescription = Текст JSON не начиналась с массива или объекта и опция, позволяющая не устанавливать фрагменты.}))) Но текст JSON действителен .
Я пробовал много решений: я изменил задачи на URLSession.shared, я использовал private struct и enum, я контролировалпеременные и стоимостные источники, ну, нет возможности правильно разобрать второй URL.Даже если я создаю НОВОЕ приложение Single View и копирую код SecondViewController.swift в функцию viewDidLoad (), он работает идеально , поэтому, опять же, это не проблема второго URL, строки JSON действителен .Я думаю, что есть вмешательство между двумя задачами разбора, похоже, что первое испортило второе.Что я могу сделать?Спасибо.
РЕДАКТИРОВАТЬ : это мой JSON (все поля являются допустимыми строками, я удалил его для упрощения)
{
"attributes": {
"version": "2.0",
"nodeValue": "\n"
},
"channel": {
"title": " ",
"link": " ",
"description": " ",
"lastBuildDate": " ",
"language": " ",
"copyright": " ",
"item": [
{
"title": " ",
"link": " ",
"guid": {
"attributes": {
"isPermaLink": "false",
"nodeValue": " "
}
},
"pubDate": " ",
"category": " "
},
{
"title": " ",
"link": " ",
"guid": {
"attributes": {
"isPermaLink": "false",
"nodeValue": " "
}
},
"pubDate": " ",
"category": " "
}
]
} }