Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将观察者设置为对象更改_Ios_Objective C_Swift - Fatal编程技术网

Ios 将观察者设置为对象更改

Ios 将观察者设置为对象更改,ios,objective-c,swift,Ios,Objective C,Swift,我正在寻找一种方法,在这种方法中,我可以创建一个只在对象上应用任何更改时调用的方法 强>例如< /强>让我们拿一个标签。我在不同情况下更改此标签的文本。现在我需要创建一个方法: - (void)labelTextChangeNotification { } 每当我的标签文本更改时,它都会调用 我可以使用NSNotification获取此信息。对于NSNotification我们需要发布通知。 我的要求就像观察我标签文本变化的观察者。 有什么方法可以做到这一点吗?您可以尝试使用键值观察(KVO

我正在寻找一种方法,在这种方法中,我可以创建一个只在对象上应用任何更改时调用的方法

<>强>例如< /强>让我们拿一个标签。我在不同情况下更改此标签的文本。现在我需要创建一个方法:

- (void)labelTextChangeNotification {

}
每当我的标签文本更改时,它都会调用 我可以使用NSNotification获取此信息。对于
NSNotification
我们需要发布通知。 我的要求就像观察我标签文本变化的观察者。
有什么方法可以做到这一点吗?

您可以尝试使用键值观察(KVO):

更改label的值时,将调用此observervalue方法。
此外,在变更字典中,您可以找到所有详细信息

要接收属性的键值观察通知,需要三件事:

  • 观察到的类必须符合 您希望遵守的属性

  • 您必须将观察对象注册到观察对象, 使用方法
    addObserver:forKeyPath:options:context:

  • 观察课必须实施
    observeValueForKeyPath:of对象:更改:上下文:

  • 为了得到属性更改的通知,观察对象 必须首先通过向要观察的对象发送
    addObserver:forKeyPath:options:context:
    message,传递观察者 对象和要观察的属性的键路径。选择 参数指定提供给观察者的信息 发送更改通知时。使用选项
    NSKeyValueObservingOptionOld
    指定原始对象值 作为变更字典中的条目提供给观察者。 指定
    NSKeyValueObservingOptionNew
    选项将提供新的 值作为更改字典中的条目。要接收这两个值, 您可以按位或选择常量

    参考苹果文件

    因此,当
    UILabel
    的文本更改时,您可以使用KVO:-

    [labelName addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:NULL];
    
    此方法将在标签文本更改时通知:-

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    
        NSLog(@"the text has been changed");
    }
    

    你能详细说明你的答案吗。
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    
        NSLog(@"the text has been changed");
    }