2016-02-27 69 views
1

在我的應用上實現緩存時,我發現可靠的崩潰EXC_BAD_ACCESS。我使用2個豆莢(Alamofire,HanekeSwift)在約50行代碼中重新創建了一個新項目的情況,並且每次都崩潰。訪問嵌套完成塊時發生崩潰 - EXC_BAD_ACCESS

所有我做的是在我的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試圖運行我的onReceiveData中的success塊。

我做錯了什麼?這是一個Swift問題嗎?這是我用的豆莢問題嗎?

作爲參考,linked是一個包含上面代碼的項目,每次啓動時都會崩潰,如果這有助於任何人進行調試。

Project on GitHub

回答

0

好像使用自定義提取程序是不是在哈尼克文檔說清楚。使用上面的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

我希望這可以幫助別人!

相關問題