访问嵌套完成块时崩溃 - EXC_BAD_ACCESS

时间:2016-02-27 04:57:07

标签: ios swift cocoapods exc-bad-access

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

我正在做的就是在我的ViewController中,调用缓存get:

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
}

我尝试在EXC_BAD_ACCESS中运行success块时收到onReceiveData

我做错了吗?这是一个Swift问题吗?这是我使用的吊舱的问题吗?

作为参考,链接是一个带有上述代码的项目,如果这有助于任何人调试,那么每次启动都会崩溃。

Project on GitHub

1 个答案:

答案 0 :(得分:0)

似乎在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

我希望这有助于某人!

相关问题