2017-04-21 36 views
1

我想在我自己的类中设置通知的观察者。在我自己的类中的通知中心

让我们说我们有类似下面例如,

public class MyClass { 

    var center: NotificationCenter 

    public init() { 
    center = NotificationCenter.default 
    } 

    public run() { 
    center.addObserver(self, selector: #selector(test), name: .UIKeyboardDidShow, object: nil) 
    } 

    func test() { 
    Print("TESTED!") 
    } 
} 

,并在我的ViewController

override func viewDidLoad() { 
    super.viewDidLoad() 

    let myClass = MyClass() 
    myClass.run() 
} 

那么这其实不会,如果我点击textField或东西,使工作键盘了。

NotificationCenter如果我这样做一定的工作,而无需使用MyClass,或者如果我改变了对象登记作为观察员象下面这样:

center.addObserver(ViewController.self, selector: #selector(test), name: .UIKeyboardDidShow, object: nil) 

,然后我当然应该实现ViewController因为在我的test功能一个class function

但这不是我想要的方式。任何建议或建议,可以解释为什么这不起作用?

+0

您是否尝试过使用textfield begin delegate? myClass.run() – karthikeyan

+0

@karthikeyan我实际上并没有尝试使用'textfields'和'keyboard'通知,因为它们很常见,所以我只是举例说明。所以没有必要解决相同的行为。我实际上是在观察'NSManagedObjectContextObjectsDidChange'通知。 – sCha

回答

2

myClass将在viewDidLoad结束时销毁。因为没有提及它。您应该在ViewController中创建一个属性:

var myClass: MyClass? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    myClass = MyClass() 
    myClass?.run() 
} 
+0

解决了我的问题,谢谢。 – sCha