应用程序中的 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错误分析