应用程序中的 EXC_BAD_ACCESS 错误,Alamofire 3.1.2

Posted

技术标签:

【中文标题】应用程序中的 EXC_BAD_ACCESS 错误,Alamofire 3.1.2【英文标题】:EXC_BAD_ACCESS Error In App, Alamofire 3.1.2 【发布时间】:2015-11-07 23:26:50 【问题描述】:

我正在运行 Xcode 7.1,ios 设备运行 9.1,以及最新版本的 Alamofire,我相信它是 3.1.2。

我看到其他人有类似的错误 - this one from SO 和 this one from their Github issues page - 我的,但这些解决方案对我不起作用。在这些情况下有效的解决方案似乎是删除 DerivedData 文件夹,但这在我的情况下不起作用。

问题是我在模拟器中运行时可以使用 Alamofire 发出 Web 请求,但是在我的设备上安装应用程序时出现以下错误(如图)。

我尝试使用运行 9.1、9.0.1 和 8.3 的设备。当我尝试发出 Web 请求时,所有这些设备都会崩溃。我坚持这一点,我没有取得任何进展。这一直有效,直到几天前我更新了我的 podfile 和我的 Xcode 版本中的所有 pod。

我是 iOS 开发的新手,所以如果您需要查看更多错误日志或类似性质的内容,请告诉我,我会尽力为您提供。任何帮助表示赞赏。

编辑:根据要求为Alamofire.request 方法添加代码。还为引用的 Manager.sharedInstance.request 方法添加代码。这些是 Alamofire 库本身中的方法。

// Alamofire.request
public func request(
    method: Method,
    _ URLString: URLStringConvertible,
    parameters: [String: AnyObject]? = nil,
    encoding: ParameterEncoding = .URL,
    headers: [String: String]? = nil)
    -> Request

    return Manager.sharedInstance.request(
        method,
        URLString,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )


// Manager.sharedInstance.request
public func request(
    method: Method,
    _ URLString: URLStringConvertible,
    parameters: [String: AnyObject]? = nil,
    encoding: ParameterEncoding = .URL,
    headers: [String: String]? = nil)
    -> Request

    let mutableURLRequest = URLRequest(method, URLString, headers: headers)
    let encodedURLRequest = encoding.encode(mutableURLRequest, parameters: parameters).0
    return request(encodedURLRequest)

【问题讨论】:

你能发布request方法的实际代码吗?您是否为异常激活了断点? 【参考方案1】:

一个问题是stringByAddingPercentEncodingWithAllowedCharacters 返回一个可选值,当你进行字符串插值时,你会得到Optional(...) 出现在字符串中。因此,当它试图从中创建一个 URL 时,它无疑是失败的。打印uri 字符串,您会看到问题。例如,如果 searchTerm"foo bar",则 uri 将变为:

https://api.spotify.com/v1/search&q=Optional("foo%20bar")&type=artist,album,track

但这是不正确的。在表达式末尾添加 ! 以将其解包:

let searchTermEncoded = searchTerm.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!

然后 URI 将(大部分)正确。

--

我建议不要这样做以逃避自己(因为您使用的字符集不正确,即使您正确解开searchTermEncoded 也是如此)。让 Alamofire 为您做这件事:

let urlString = "https://api.spotify.com/v1/search"
let parameters = ["q" : searchTerm, "type" : "artist,album,track"]

Alamofire.request(.GET, urlString, parameters: parameters)
    .responseJSON  response  in
        guard response.result.error == nil else 
            print(response.result.error)
            return
        

        print(response.result.value)

【讨论】:

不是这样的。我打印了,效果很好。即使我将 URL 硬编码为第二个参数,它仍然会爆炸。另外,请记住,这在模拟器中完全符合预期,并且在我的设备上运行时只会出错。这是它的屏幕截图。 imgur.com/TwH4rya 好的,让我试试你的第二次编辑。反正我更喜欢这种方法。 不,也不是,但是一旦我解决了这个问题,我就会使用这种方法。感谢那!这是带有新代码但同样错误的屏幕截图。 imgur.com/Hmjcup2 Rob - 我创建了一个新项目并将所有文件移动到新项目中,并且在重建所有内容后,我得到了一切工作。仍然不确定错误是什么,但此时我不在乎。感谢您抽出宝贵时间提供帮助。 顺便说一句,在新版本的 Xcode 中打开旧项目时,我有时会看到无法解释的错误。有时在显示目标设置时从“编辑器”菜单中选择“验证设置...”会修复它。但我很高兴你以某种方式解决了这个问题!

以上是关于应用程序中的 EXC_BAD_ACCESS 错误,Alamofire 3.1.2的主要内容,如果未能解决你的问题,请参考以下文章

聊天应用,分配问题。 Xcode 中的自定义类初始化错误(EXC_BAD_ACCESS 代码=2)

AppDelegate 类声明中的 EXC_BAD_ACCESS

得到奇怪的线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x9)swift中的崩溃错误

ios中的奇怪崩溃Signal和EXC_BAD_ACCESS错误分析

这个错误对我的程序有啥影响? “EXC_BAD_ACCESS”。共享库

堆栈实现中的 EXC_BAD_ACCESS