为啥我在 Alamofire 中收到“字符串不是 NSObject”错误?

Posted

技术标签:

【中文标题】为啥我在 Alamofire 中收到“字符串不是 NSObject”错误?【英文标题】:Why am I getting a "String is not NSObject" error in Alamofire?为什么我在 Alamofire 中收到“字符串不是 NSObject”错误? 【发布时间】:2015-04-05 17:39:14 【问题描述】:
let parameters = [
                "alert": model.alert, //Bool
                "distance": model.distance, //Int
                "minAge": model.minAge, //Int
                "maxAge": model.maxAge, //Int
                "access_token": access_token //String
            ]
            Alamofire.request(.POST, Constants.Domain + "/accounts/discovery-settings", parameters: parameters).responseJSON
                (req, res, json, error) in
            

我之前做了一个非常相似的请求,它成功了。根据 Alamofire 的说法,我可以将参数设置为任何值,对吧?

编辑:

如果我删除这些行,那么它编译得很好。 Bool 和 Int 类型似乎是问题所在。

            "alert": model.alert, //Bool
            "distance": model.distance, //Int
            "minAge": model.minAge, //Int
            "maxAge": model.maxAge, //Int

型号是:

class DiscoverySettings 
    var alert: Bool
    var distance: Int
    var minAge: Int
    var maxAge: Int
    private init()
        alert = true
        distance = 10
        minAge = 18
        maxAge = 25
    

https://github.com/Alamofire/Alamofire#post-request-with-url-encoded-parameters

【问题讨论】:

你能说得更具体点吗?这是编译时错误还是运行时错误?它发生在哪条线上?是否突出显示特定字符​​串?如果是运行时错误,能否显示完整的堆栈跟踪? (我没有发现您发布的代码有任何问题。) 你可以尝试写access_token as NSString,因为NSString是NSObject的子类。 这是一个编译错误。 Access_token 不是问题。我对另一个请求也这样做。 看来是这些问题: "alert": model.alert, //Bool "distance": model.distance, //Int "minAge": model.minAge, //Int "maxAge ": model.maxAge, //Int .如果我删除它们,那么它会编译。 【参考方案1】:

很难说,因为您实际上并没有发布错误,但我猜您在字典中遇到了桥接问题。试试以下方法:

let parameters: [String: AnyObject] = [
    "alert": model.alert, //Bool
    "distance": model.distance, //Int
    "minAge": model.minAge, //Int
    "maxAge": model.maxAge, //Int
    "access_token": access_token //String
]

let request = Alamofire.request(.POST, Constants.Domain + "/accounts/discovery-settings", parameters: parameters)
request.responseJSON  request, response, json, error in
    println(request)
    println(response)
    println(json)
    println(error)

希望这有助于阐明一些问题。如果没有,那么请发布您的实际错误,我很乐意修改我的答案。

【讨论】:

以上是关于为啥我在 Alamofire 中收到“字符串不是 NSObject”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能初始化 Alamofire 4 会话管理器?

为啥我收到此错误,responseSerializationFailed?

为啥即使我使用 Alamofire 发出请求,我的应用程序仍然冻结?

由于对成员 jsonObject 的不明确引用,我无法编译我的 alamofire 代码。为啥?

Alamofire 在 Swift 3、Xcode 8 中出现错误

为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?