2015-11-10 171 views
3

下面的代碼只工作一次,現在突然間它沒有顯示興趣點(POI)。我在兩臺不同的機器上嘗試過它,並獲得相同的行爲。這是我感到困惑的,是代碼還是我的模擬器設置。iOS模擬器沒有更新位置

我清理了這個項目,確定我有自定義的模擬器。我現在確實有經緯度打印,現在它突然不會在控制檯上打印。

進口的UIKit 進口MapKit 進口CoreLocation

類的MapViewController:UIViewController中,CLLocationManagerDelegate {

@IBOutlet var map: MKMapView! 

var manager:CLLocationManager! 
var latitude:Double = 0.0 
var longitude:Double = 0.0 
var location:Double = 0.0 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("init") 
    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy - kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    print("test test test") 

    let userLocation:CLLocation = locations[0] 
    self.latitude = userLocation.coordinate.latitude 
    self.longitude = userLocation.coordinate.longitude 

    let request = MKLocalSearchRequest() 
    request.naturalLanguageQuery = "Army Recruiting" 

    request.region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 1600, 1600) 

    MKLocalSearch(request: request).startWithCompletionHandler { (response, error) in 
     guard error == nil else { return } 
     guard let response = response else { return } 
     guard response.mapItems.count > 0 else { return } 

     let randomIndex = Int(arc4random_uniform(UInt32(response.mapItems.count))) 
     let mapItem = response.mapItems[randomIndex] 

     mapItem.openInMapsWithLaunchOptions(nil) 
    } 

    print("\(self.longitude) \(self.latitude)") 

} 

--------------------經由模擬器--update 1個--------------------

更新位置

enter image description here

我已經注意到了以下功能不運行:

func locationManager(manager: CLLocationManager, didUpdateLocations 
locations: [CLLocation]) 

---------------------更新2 ------ --------------

該應用程序工作一次後停止。不知道發生了什麼事。是的,我加入NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription enter image description here

回答

2

夫婦與你的代碼問題:

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("init") 
    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy - kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
} 

替換:

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("init") 
    manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy = kCLLocationAccuracyBest 
    manager.requestWhenInUseAuthorization() 
    manager.startUpdatingLocation() 
} 

進行追加(用於信息)

您可以創建不同的位置GPX文件。

您也可以模擬GPX文件中的路由 - 深入研究Apple文檔,其中介紹瞭如何將GPX文件設置爲您的目標版本。 https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/CustomizingYourExperienceThroughXcodeSchemes/CustomizingYourExperienceThroughXcodeSchemes.html

這裏還有一個很好的教程,其中包含創建GPX文件和路線的鏈接,這些文件和路線是我過去使用的,非常有用。 https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html

+0

locationManager func未執行。我通過將print()語句放在函數中來確認。我不確定它爲什麼沒有運行。 – Drew1208

+0

應用程序是否使用位置服務? – RichAppz

+0

只詢問,因爲它聽起來像你沒有在你的.plist文件中設置NSLocationAlwaysUsageDescription或NSLocationWhenInUseUsageDescription(你的情況)。 轉到您的目標>信息並添加一行與NSLocationWhenInUseUsageDescription和字符串將是您希望使用接受位置服務的應用 – RichAppz

2

模擬器可以有一組硬編碼的位置,並更改它們或禁用它們在Xcode的控制檯。

它應該是這樣的:

enter image description here

如果你想測試真正的移動位置,你應該測試它的設備上。

+0

請參閱更新... – Drew1208