gpt4 book ai didi

ios - 尝试将 AlamoFire JSON 响应映射到类并接收 "Fatal Error: Unexpectedly found nil while unwrapping optional"

转载 作者:行者123 更新时间:2023-11-29 01:52:32 25 4
gpt4 key购买 nike

我正在使用 AlamoFire 提取我的 API 来填充我的 tableView 的单元格。该应用程序能够构建,但很快就会崩溃,并出现常见的“ fatal error :在展开可选值时意外发现 nil。”我检查了所有可选值,但无法确定是哪一个导致了问题。 Xcode 表示问题出现在 AlamoFire 的 .map 部分。任何帮助将不胜感激。

在我开始编写代码之前,我的 JSON 中的一个值对于每个键都是 null(我没有编写 JSON)。它不是“空”,只是空。即使我没有将该键映射到我的类,这是否会导致问题?

JSON 是字典数组。发出 .GET 请求后,我获取 JSON 响应并将其映射到我初始化为类类型数组的变量。

代码如下:

var users = [User]()  //User is the class I created  
var results = NSMutableOrderedSet()
let url = "http://www.example.com"
let appToken = "abcd12345"


Alamofire.request(.GET, url, parameters: ["appToken": appToken]).responseJSON() {
(_, _, JSON, _) in
let users = (JSON!.valueForKey("results") as! [NSDictionary]).map {
User(name: $0["username"] as! String, image: $0["profileImage"] as! String, email: $0["email"] as! String, lat: $0[("lat" as NSString).doubleValue] as! Double, lon: $0[("lon" as NSString).doubleValue] as! Double, distance: $0["status"] as! Int)
}

self.results.addObjectsFromArray(users)
self.localTableView!.reloadData()

}

这是我的 User.swift 中的类类型:

class User: NSObject, MKAnnotation {
var name:String!
var profileImage:String!
var email:String!
var lat:Double
var lon:Double
var distance:Int!

var coordinate: CLLocationCoordinate2D
var title: String
var subtitle: String
var imageName: String

var userID:String!
var firstName: String!
var lastName: String!

init(name:String, image:String, email:String, lat:Double, lon:Double, distance:Int){
self.name = name
self.profileImage = image
self.email = email
self.lat = lat
self.lon = lon
self.distance = distance

self.coordinate = CLLocationCoordinate2DMake(lat, lon)
self.title = name
self.subtitle = twitterName
self.imageName = "image.png"


}

我在一些帮助部分读到我可能没有正确初始化我的类的实例,但我尝试了所有组合都无济于事。我也试过使用 NSMutableDictionary,但没有解决任何问题。

最佳答案

谢谢大家的回复。他们都非常有帮助。

当我在上面分享它时,我将部分代码缩短为要点,但是在将 var latvar lon 映射到我的用户数组时发现了问题。在 API 中,它们是 double 值,但被放在引号中,因此它会将其作为字符串读取。我已经意识到这个问题并编写代码将它们从字符串转换为 double 。但是,我将它放在代码的 .map{} 部分(上面未显示)。那里可能有一种方法可以做到这一点,但它对我来说从来没有用过。

相反,我通过更改我的 class User 来找到解决方案,如下所示:

let lat: String
let lon: String

var latDouble: Double
var lonDouble: Double

然后初始化如下:

self.latDouble = (lat as NSString).doubleValue
self.lonDouble = (lon as NSString).doubleValue

我还结合了 SwiftyJSON 来检索我的 API 数据,然后按如下方式填充我的数组:

Alamofire.request(.GET, url, parameters: ["appToken": appToken]).responseJSON(){
(_,_,json,_) in
if (json != nil){
var jsonObj = JSON(json!)

if let userArray = jsonObj ["results"].array {

for userDict in userArray {
var name: String! = userDict["username"].string
var email: String! = userDict["email"].string
var image: String! = userDict["profileImage"].string
var lat: String! = userDict["lat"].string
var lon: String! = userDict["lon"].string
var distance: Int! = userDict["status"].int

var user = User(name: name, image: image, email: email, lat: lat, lon: lon, distance: distance)

self.users.append(user)
}

self.localTableView.reloadData()
}

我意识到这可能不是最好或唯一的解决方案,但它解决了我的问题。我希望这可能对其他人有所帮助。再次感谢。

关于ios - 尝试将 AlamoFire JSON 响应映射到类并接收 "Fatal Error: Unexpectedly found nil while unwrapping optional",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com