2015-03-17 3 views
1

Последовательный код. [Надеюсь, что] проблема полностью изложена в вышеуказанном вопросе. Заранее спасибо. MJB.Почему эта регистрация [Swift] NSObject.addObserver не будет вызвана func observValueForKeyPath(), как ожидалось?

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate 
{ 
    var some_string:NSString = "one" 

    func application (application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    { 
     println("init...") 
     self.addObserver(self, forKeyPath: "some_string", options: nil, context: nil) 
     self.some_string = "two" 
     return true 
    } 

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

ответ

3

Согласно Apple Documentation, вам нужно использовать dynamic ключевое слово, чтобы включить КВО для этого свойства:

dynamic var some_string : NSString = "one" 

Кроме того, класс должен унаследовать от NSObject, чтобы сделать эту работу, хотя в вашем случае то есть с UIResponder.

+0

Спасибо Эрик, спасибо за то, что он изящно пассивно-агрессивный. Иногда нам всем нужно что-то сказать, чтобы заставить нас затачивать. Apple, документы, получили его. –

+1

О, я не пытался быть, просто давал вам справочный материал. Я должен был найти это, чтобы найти этот камень! – Erik

 Смежные вопросы

  • Нет связанных вопросов^_^