簡體   English   中英

測試CLGeocoder geocodeAddressString方法的地標總是為零

[英]test CLGeocoder geocodeAddressString method placemarks is always nil

代碼來自book,它總是在第一個XCTFail()中失敗,我在設備和模擬器上都嘗試過,它不應該是網絡問題,查看錯誤,它顯示Optional(Error Domain=kCLErrorDomain Code=2 "(null)")

func test_GeocoderWorksAsExpected() {
    let expectation = expectationWithDescription("Wait for geocode")
    CLGeocoder().geocodeAddressString("Infinite Loop 1, Cupertino") {
        (placemarks, error) -> Void in
        let placemark = placemarks?.first

        let coordinate = placemark?.location?.coordinate
        guard let latitude = coordinate?.latitude else {
            XCTFail(); return
        }
        guard let longitude = coordinate?.longitude else {
            XCTFail(); return
        }
        XCTAssertEqualWithAccuracy(latitude, 37.3316851, accuracy: 0.000001)
        XCTAssertEqualWithAccuracy(longitude, -122.0300674, accuracy: 0.000001)

        expectation.fulfill()
    }
    waitForExpectationsWithTimeout(3, handler: nil)
}

你說它不應該是網絡錯誤,但這恰恰是代碼為2的CLErrorDomain錯誤( CLError.Network )。 你可以出於各種原因得到它。 例如,當我嘗試監視與Charles的通信時,我得到了它,但還沒有告訴我的計算機信任Charles證書。 但是一旦我做了,那個錯誤就消失了。 您可能需要確認您沒有使用干擾TLS / HTTPS請求的代理服務器或其他網絡。

另外,我還建議:

  • 你應該defer實現期望(無論你從那個閉包中取出什么路徑,它都會得到滿足);
  • 您可能希望降低緯度和經度錯誤檢查的准確性(因為我發現我的結果差異很小)。

所以,也許是這樣的:

func testGeocoder() {
    let expectation = expectationWithDescription("Wait for geocode")
    CLGeocoder().geocodeAddressString("Infinite Loop 1, Cupertino") { placemarks, error in
        defer { expectation.fulfill() }

        guard error == nil else {
            XCTFail(error!.localizedDescription); return
        }

        guard let coordinate = placemarks?.first?.location?.coordinate else {
            XCTFail("No coordinate"); return
        }

        XCTAssertEqualWithAccuracy(coordinate.latitude, 37.3316851, accuracy: 0.001, "Latitude doesn't match")
        XCTAssertEqualWithAccuracy(coordinate.longitude, -122.0300674, accuracy: 0.001, "Longitude doesn't match")
    }
    waitForExpectationsWithTimeout(3, handler: nil)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM