2017-03-28 62 views
0

我試圖通過使用使用MKLocalSearchCompleter的本機模塊在React Native應用程序中實現地址完成。這是一個簡單的類,使用直接的委託方法,但我似乎無法從我的應用程序獲得結果。即使運行相關的單元測試也不行,我不知道爲什麼。iOS MapKit CompleterDidUpdateResults未調用

最新情況是,我將.queryFragment屬性設置爲我的部分字符串,該字符串應自動啓動搜索,以通知委託人何時完成或是否有錯誤。在提出請求之前,我正確設置了代理,但我的代理completerDidUpdateResults(_ completer: MKLocalSearchCompleter)completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error)方法從未被調用。

.isSearching屬性初始化後設置爲false,當我設置.queryFragment變爲true時,所以它似乎在內部工作。如果我創建一個新項目並拖動到完全相同的類和單元測試中,測試運行良好,並且我得到的結果沒有問題,測試在大約0.25秒內完成,但在我的實際應用程序項目中,測試命中了30秒超時並在我得到答覆之前失敗。

唯一的其他問題,我能找到的這個問題是一個蘋果開發者論壇問題解釋從九月

我沒有迴應相同的情況下這是我的代碼和測試:

class AddressUtils: NSObject, MKLocalSearchCompleterDelegate { 

    let searchCompleter = MKLocalSearchCompleter() 
    var results: [MKLocalSearchCompletion]? 
    var onSuggestionsReceived: (([String]) -> Void)? 

    public override init() { 
     super.init() 
     searchCompleter.delegate = self 
    } 

    public func getAddressSuggestions(address: String!, completion: @escaping ([String]) -> Void) { 
     self.onSuggestionsReceived = completion 
     searchCompleter.queryFragment = address 
     if searchCompleter.isSearching { 
      print("Searching") // Prints 
     } 
    } 

    func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) { 
     self.results = completer.results 
     let results = completer.results.flatMap { (result) -> String? in 
      return result.title + " " + result.subtitle 
     } 
     onSuggestionsReceived?(results) 
    } 

    func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) { 
     onSuggestionsReceived?([]) 
    } 

} 

class UtilityTests: XCTestCase { 

    func testAddressAutocomplete() { 
     let expectation = self.expectation(description: "Perform search") 
     let query = "11 Farns" 
     let utils = AddressUtils() 
     utils.getAddressSuggestions(address: query) { (results) in 
      expectation.fulfill() 
     } 
     wait(for: [expectation], timeout: 30) 
    } 

} 

回答

0

我能在玩了幾天之後得到這個工作,但它似乎與測試本身有關,而不是與實際的API或實現有關。對於測試驅動開發,我猜測得太多了。問題是我們的測試目標是單獨添加的,並且正在作爲它自己的方案的單獨目標運行,而不是使用主方案中的「測試」配置。不完全確定這是爲什麼會有所作爲,但如果你像我一樣被困在這個問題上,這是我最好的建議。