我從一個生成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