gpt4 book ai didi

ios - 访问嵌套完成 block 时崩溃 -- EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 08:44:38 27 4
gpt4 key购买 nike

在我的应用程序上实现缓存时,我发现了 EXC_BAD_ACCESS 的可靠崩溃。我用大约 50 行代码和 2 个 pod(Alamofire、HanekeSwift)在一个新项目中重新创建了这种情况,但每次都会崩溃。

我所做的只是在我的 ViewController 中,调用缓存获取:

CachingManager.sharedInstance.fetchAllThings({
result in
// result should be an array of objects
print(result)
})

CachingManager 的 fetchAllThings 方法是:

func fetchAllThings(completion: ([AnyObject] -> Void)?) {

let fetcher = CustomFetcher<JSON>(key: "HELLO")

fetcher.fetch(failure: {
error in
print(error)
}, success: {
json in
completion?(json.array)
})
}

现在,上面找到的 CustomFetcher 是这样实现的:

override func fetch(failure fail: ((NSError?) -> ()), success succeed: (JSON) -> ()) {
let endpoint = "www.google.com"
Alamofire.request(.GET, endpoint, parameters: nil, encoding: .URL, headers: nil)
.responseJSON {
(data) -> Void in
self.onReceiveData(data.data!, failure: fail, success: succeed)
}
}

private func onReceiveData(data: NSData, failure: ((NSError?) -> ()), success: (JSON) -> ()) {
success(JSON.Array(["HI"])) <--- CRASH HAPPENS HERE
}

尝试在我的 onReceiveData 中运行 success block 时,我得到一个 EXC_BAD_ACCESS

我做错了什么吗?这是 swift 的问题吗?这是我使用的 pod 的问题吗?

作为引用,linked 是一个带有上述代码的项目,如果这有助于任何人调试它,每次启动时都会崩溃。

Project on GitHub

最佳答案

在 Haneke 文档中似乎自定义提取器的使用不是很清楚。使用上面的 fetchAllThings 方法,我试图直接从 CustomFetcher 获取,这导致了错误的访问(我猜这不是它的预期用途)。将提取器与 JSON 缓存一起使用的正确方法是:

func fetchAllThings(completion: ([AnyObject] -> Void)?) {

let fetcher = CustomFetcher<JSON>(key: "HELLO")

let cache = Shared.JSONCache

cache.fetch(fetcher: fetcher, formatName: "original", failure: {
error in
print(error)
}, success: {
json in
completion?(json.array)
})
}

这里的关键是我现在使用库的 cache 对象来调用 Fetcher

我希望这对某人有帮助!

关于ios - 访问嵌套完成 block 时崩溃 -- EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35665878/

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