2016-04-06 9 views
0

Tüm örnekler yetkilendirme isteğinde bulunur ve denetleyici konumunda konumu güncellemeye başlar. Uygulama temsilcisinde ve bir görünüm denetleyicisinde, bir düğmeye bastığınızda kullanıcının koordinatlarını/konumunu döndürmek istiyorum. (Kullanıcı denetimlerinin/konumların herhangi bir denetleyicide erişilebilir olmasını istiyorum)Uygulama temsilcisinde requestWhenInUseAuthorization konum hizmeti nasıl ayarlanır ve denetim denetleyicisinde koordinatlar nasıl oluşturulur?

cevap

2

Burada birkaç seçeneğiniz var.

Her şeyden önce, CLLocationManager için zaten uygulanmış bir sargıyı uygulamanızı veya kullanmanızı ve bu işlevselliği doğrudan AppDelegate uygulamasında (example of such location manager implementation) uygulamak yerine kodunuzun herhangi bir yerine çağırmanızı öneririm. Böyle bir konum yöneticisi, bildirim merkezi kullanarak programınızın geri kalanıyla iletişim kurabilir (her görüntüleme denetleyicisi tanımladığınız belirli bir bildirime abone olur) veya örneğin bir kapanış dizisi aracılığıyla (her görünüm denetleyicisi, konum güncellemesini yönetmek için kendi kapağını geçirir) konum yöneticisi örneği ve bir kullanıcı konumu güncellendiğinde, yer yöneticisi dizideki her kapanmayı çağırır, dolayısıyla tüm görüntü denetleyicileri konum verilerine erişim isteğinde bulunduğundan bu güncelleştirmeyi alırsınız).

Bunun dışında, AppDelegate'inizde CLLocationManager aracılığıyla kullanıcı konumuna önceden eriştiğinizi düşünelim. bildirim merkezi

kullanarak - AppDelegate -

Swift: (Eğer gerçek konum verilerini var) konumu hakkında güncellemeleri almak bir temsilci işlevinde, aşağıdakileri yaparak uygulamasından istediğiniz görünümü kontrolöre bu veri gönderebilir

public func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let arrayOfLocation = locations as NSArray let location = arrayOfLocation.lastObject as! CLLocation let coordLatLon = location.coordinate var userInfo = [String:AnyObject]() userInfo["longitude"] = coordLatLon.longitude userInfo["latitude"] = coordLatLon.latitude let nc = NSNotificationCenter.defaultCenter() nc.postNotificationName("userLocationUpdate", object: self, userInfo: userInfo) } 

Swift - ViewController - bildirim merkezi (örneğin, viewDidAppear/viewDidLoad tanımlamaktır) kullanılarak

let nc = NSNotificationCenter.defaultCenter() 
nc.addObserver(self, selector: #selector(ViewController.locationUpdated(_:)), name: "userLocationUpdate", object: nil) 
.210 Swift - ViewController - locationUpdated selektör

func locationUpdated(notification: NSNotification) { 
    if let userInfo = notification.userInfo { 
     //access your data here 
    } 
} 
+0

Güzel cevap. Herhangi bir zamanda görüntü denetleyicideki son koordinatı/konumu nasıl yazdırabilirim? Hala o yöneticiyi uyguluyorum, anladığım zaman hastalanmam. – user42541

+1

Bunu yapmanın birçok yolu var. En son alınan koordinatı (tercih edilen şekilde değil ve biraz kirli, benim düşüncemde) tutan statik bir global değişken yaratabilirsiniz. Ardından, ihtiyacınız olan her ViewController'da bir var oluşturabilirsiniz ve en son gps'yi saklayabilirsiniz. Önerdiğim gibi kendi LocationManager sarmalayıcınızla giderseniz, kullanıcı konum güncellendiğinde güncellediğiniz normal bir değişken tanımlayın. Daha sonra bu değişkene herhangi bir ViewController'da LocationManager örneğine başvurmak suretiyle erişebilirsiniz. Not: LocationManager tekildir, bu yüzden verilerinizi almak oldukça kolaydır. –

+1

@ user42541 LocationManager'da bir public instance değişkeni (userLocationVar, diyelim) oluşturmak istiyorum, kullanıcı konumu delege işlevinde her güncellemede bu değişkeni günceller ve her ViewController'da en son konum almak için LocationManager.sharedInstance.userLocationVar'a erişebilirsiniz. –

İlgili konular