iPhone自定义事件的属性值更改

时间:2011-11-25 10:32:55

标签: iphone ios4 ios5

是否可以为属性值更改添加自定义事件?我需要在属性值更改时触发事件。

3 个答案:

答案 0 :(得分:3)

我假设您想要在另一个对象(“观察”)中更改属性时触发对象(称为“观察者”)中的事件。

您可以通过两种方式执行此操作:

  1. 使用通知中心,您可以通过使用任何NSNotificationCenter“postNotification:”方法发布通知来覆盖设置者,然后所有感兴趣的观察者都会收到通知,只要他们为此类通知进行了注册。

  2. 使用KVO(键值观察)您必须使用具有该属性的实例显式注册观察者;例如如果self想要注册“instanceToObserve”属性“myProperty”:

  3. 
    [instanceToObserve addObserver:self forKeyPath:@"myProperty" option:NSKeyValueObservingOptionNew context:NULL];
    

    然后在“自我”的类中实现“观察”功能:

    
    - (void)observeValueForKeyPath:(NSString *)keyPath
                          ofObject:(id)object
                            change:(NSDictionary *)change
                           context:(void *)context {
    // your implementation goes here
    }
    

    两者的用途取决于你。如果您遵循基本的Cocoa约定规则,请考虑自动支持KVO,因此不需要额外的工作,也不需要对合成的setter进行任何更改。

答案 1 :(得分:0)

不确定。例如

<。>文件中的

NSString * myString

<。>文件中的

- (NSString *)myString {
    //Custom event
    return myString;
}

这会创建一个可以用作self.myString

的属性myString

答案 2 :(得分:0)

您可以使用KVO(键值观察)或定义您自己的setter方法并在其中编写自定义事件吗?通常,KVO用于观察属性值的变化。

https://stackoverflow.com/questions/4813331/understanding-kvo-in-ios

http://nachbaur.com/blog/back-to-basics-using-kvo

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html