2015-05-14 3 views
0

Я написал класс в Swift для Lat/Long, и я хочу разместить местоположение на контроллере представления. Я использую KVO в составе MVC. Я просто на испытания той момент, но почему неТест KVO в SWIFT

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

    let location = locations.last as! CLLocation 
    let geocoder = CLGeocoder() 
    geocoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, e) -> Void in 
     if let error = e { 
      println("Error: (e.localizedDescription)") 
     } else { 
      let placemark = placemarks.last as! CLPlacemark 
      LocationClass.addObserver(self, forKeyPath: "LocationString", options: .New, context: &self.myContext) 
      self.LocationManager.stopUpdatingLocation() 
      self.LocationString = "\(placemark.subLocality), \(placemark.locality)" 
     } 
    }) 



} 


override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject: AnyObject], context: UnsafeMutablePointer<Void>) { 
      println("Things have changed") 
    } 
} 

но почему не «функция observeValueForKeyPath дозвонились? Любые идеи были бы замечательными. LocationString - динамический var в верхней части класса. MyContext - это просто var int = 0

ответ

0

Вы сначала назначаете значение, добавляя себя как наблюдателя. Значение никогда не изменяется ПОСЛЕ того, как вы зарегистрировались, чтобы наблюдать за этой переменной.

self.LocationString = "\(placemark.subLocality), \(placemark.locality)" 
        //println(LocationString) 

LocationClass.addObserver(self, forKeyPath: "LocationString", options: .New, context: &self.myContext)/ 

Это должно быть в другом порядке:

LocationClass.addObserver(self, forKeyPath: "LocationString", options: .New, context: &self.myContext)/ 
self.LocationString = "\(placemark.subLocality), \(placemark.locality)" 
        //println(LocationString) 
+0

спасибо за это, но он по-прежнему не работает .. Я изменил свой код в своем описании, спасибо – Jason

1

Вы подключаете наблюдателя на объект класса. Предполагая, что ваш «я» является экземпляром LocationClass и имеет свойство «LocaionString», он должен быть

self.addObserver(self, forKeyPath: "LocationString", options: .New, context: &self.myContext) 

и не забудьте прикрепить «динамический модификатор