我创建了一个核心数据实体(“Exstand”),它看起来像下面的 JSON 结构(相同的字段),我尝试从 JSON 文件中读取数据并写入核心数据对象数组。
我有一个本地(存储在 Xcode 中)JSON 文件,其中包含如下所示的数据:
[{
"objectid": 13003,
"lat": 40.198539203831054,
"long": 20.294164128143816,
"adresse": "1 Random Street
"zeitraum": "v. 7-20h",
"stellplatzanzahl": 3
},
{
"objectid": 13004,
"lat": 50.25018761410509,
"long": 30.44382262875748,
"adresse": "2 Random Street",
"zeitraum": "",
"stellplatzanzahl": 6
}]
我在这里阅读了很多教程和帖子,但我一生都无法让它为我工作,因为它们要么打开远程文件,要么不尝试存储到核心数据中。
这是我到目前为止的代码,当我尝试将对象附加到数组时它崩溃了。当 .append 行被注释时,我可以在控制台中看到它实际上并没有将数据写入“stand”。
class EventDetails: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var eventMap: MKMapView!
var annotation:MKAnnotation!
var Standarray: [Exstand] = []
var stand:Exstand? = nil
override func viewDidLoad() {
super.viewDidLoad()
do {
let data = NSData(contentsOf: url!)
let jsonData = try JSONDecoder().decode([Nstand].self, from: data! as Data)
for detail in jsonData {
self.stand?.adresse = detail.adresse as String
self.stand?.lat = detail.lat as Double
self.stand?.long = detail.long as Double
self.stand?.stellplatzanzahl = Int16(detail.stellplatzanzahl as Int)
self.stand?.zeitraum = detail.zeitraum as String
print(stand?.adresse)
print("adressen!")
//The line below crashes the app Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Standarray.append(stand!)
}
print("array!")
print(Standarray)
} catch {
print(error) // Handle Error
}
}
}
我还创建了这个结构,因为在一些教程中他们使用它而不是核心数据实体,所以如果这是更好的,我也可以使用它。
struct NStand : Codable{
var objectid: Int
var lat: Double
var long: Double
var adresse: String
var zeitraum: String
var stellplatzanzahl: Int
}
我还有 XML 文件中的 JSON 数据。我不在乎从哪里读取它,我想要的只是我的应用程序实际读取和存储数据。
预先感谢您提供任何有用的建议。
最佳答案
您的 json 在这里无效
"adresse": "1 Random Street
至
"adresse": "1 Random Street",
应该是
[{
"objectid": 13003,
"lat": 40.198539203831054,
"long": 20.294164128143816,
"adresse": "1 Random Street",
"zeitraum": "v. 7-20h",
"stellplatzanzahl": 3
},
{
"objectid": 13004,
"lat": 50.25018761410509,
"long": 30.44382262875748,
"adresse": "2 Random Street",
"zeitraum": "",
"stellplatzanzahl": 6
}
]
<小时/>
struct NStand : Codable{ // for core-data NSManagedObject
let objectid,stellplatzanzahl: Int
let lat,long: Double
let adresse,zeitraum: String
}
<小时/>
let str = """
[{
"objectid": 13003,
"lat": 40.198539203831054,
"long": 20.294164128143816,
"adresse": "1 Random Street",
"zeitraum": "v. 7-20h",
"stellplatzanzahl": 3
},
{
"objectid": 13004,
"lat": 50.25018761410509,
"long": 30.44382262875748,
"adresse": "2 Random Street",
"zeitraum": "",
"stellplatzanzahl": 6
}]
"""
do {
let res = try JSONDecoder().decode([NStand].self, from: Data(str.utf8))
print(res)
}
catch {
print(error)
}
关于arrays - 从 JSON 或 XML 文件读取并写入核心数据对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55040794/