我从一个生成json数组的php脚本中提取数据。 iOS更新后,我的jsonserialization崩溃了应用程序。根据jsonformatter.org和freeformatter.com/json-validator.html(符合RFC4627),json应该很好地形成。 这是代码。任何帮助是极大的赞赏!JSON序列化错误
func parseJSON() {
var jsonResult: NSMutableArray = NSMutableArray()
do{
jsonResult = try JSONSerialization.jsonObject(with: self.data as Data, options:JSONSerialization.ReadingOptions.allowFragments) as! NSMutableArray
} catch let error as NSError {
print(error)
}
var jsonElement: NSDictionary = NSDictionary()
let locations: NSMutableArray = NSMutableArray()
for i in 0 ..< jsonResult.count
{
jsonElement = jsonResult[i] as! NSDictionary
let location = LocationModel()
//the following insures none of the JsonElement values are nil through optional binding
if let id = jsonElement["id"] as? String,
let oprettelsesdato = jsonElement["oprettelsesdato"] as? String,
let overskrift = jsonElement["overskrift"] as? String,
let address = jsonElement["address"] as? String,
let intro = jsonElement["intro"] as? String,
let email = jsonElement["email"] as? String,
let tlf = jsonElement["tlf"] as? String,
let annonce = jsonElement["annonce"] as? String,
let journalnr = jsonElement["journal"] as? String
{
location.id = id
location.oprettelsesdato = oprettelsesdato
location.overskrift = overskrift
location.address = address
location.intro = intro
location.email = email
location.tlf = tlf
location.annonce = annonce
location.journalnr = journalnr
}
locations.add(location)
}
DispatchQueue.main.async(execute: {() -> Void in
//print("Check home")
self.delegate.itemsDownloaded(locations)
})
}
系统崩溃日志:
objc[1285]: Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x11799a998) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x1177bc880). One of the two will be used. Which one is undefined.
Could not cast value of type '__NSArrayI' (0x105f1ed88) to 'NSMutableArray' (0x105f1ee50).
UPDATE 我现在用vadians解决方案,但是,而不是self.delegate.itemsDownloaded(位置),我用self.delegate.itemsDownloaded(如位置NSArray的)。
但是,所有jsonElements现在都是零。它得到数组中元素的正确数目,但如果我打印的所有值均为零:
(
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil",
"id: nil, oprettelsesdato: nil, overskrift: nil, address: nil, journalnr: nil"
)
这里是我尝试恢复数据。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item: LocationModel = feedItems[indexPath.row] as! LocationModel
let cellIdentifier: String = "BasicCell"
let myCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
//myCell.detailTextLabel!.text = item.oprettelsesdato
myCell.textLabel!.text = item.overskrift
myCell.textLabel!.leadingAnchor.constraint(equalTo: myCell.leadingAnchor).isActive = true
myCell.textLabel!.topAnchor.constraint(equalTo: myCell.topAnchor).isActive = true
myCell.textLabel!.heightAnchor.constraint(equalTo: myCell.heightAnchor,
multiplier: 1.0).isActive = true
myCell.textLabel!.widthAnchor.constraint(equalTo: myCell.heightAnchor,
multiplier: 0.8).isActive = true
//print(item.id) <-returns nil
//print(item.oprettelsesdato) <-returns nil
//print(item.overskrift) <-returns nil
extralabel!.text = item.oprettelsesdato // <-This is where the error is thrown
extralabel!.textColor = UIColor.white
myCell.contentView.addSubview(extralabel!)
//some more stuff...
}
错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
不知道什么错误。有什么建议么?
你可以显示你的崩溃日志吗? –
jsonResult =尝试JSONSerialization.jsonObject(使用:self.data作为数据,选项:JSONSerialization.ReadingOptions.allowFragments)as! NSMutableArray将此行更改为jsonResult = try JSONSerialization.jsonObject(with:self.data as Data,options:JSONSerialization.ReadingOptions.allowFragments)as? NSMutableArray将工作 –
简单的建议。 **不要 - 永远不要在Swift中使用'NSMutable ...'集合类型**。它们与Swift收集类型无关并导致您的所有问题。 – vadian