Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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
当对象不是nil ios时执行选择器_Ios_Null_Nsobject_Performselector - Fatal编程技术网

当对象不是nil ios时执行选择器

当对象不是nil ios时执行选择器,ios,null,nsobject,performselector,Ios,Null,Nsobject,Performselector,我有一个对象ImageURLObject,这个对象有属性objectUrlImage,当我创建这个对象时属性objectUrlImage为零,因为图像url还没有设置,当属性有实际值时,我如何执行选择器?这不是一个方法,因为我不知道延迟属性在什么时候变为非零。你的问题不清楚。但是如果我做对了,你应该在setter中为属性做你想做的事情 - (void)setObjectUrlImage:(UrlImage *)objectUrlImage { _objectUrlImage = obje

我有一个对象
ImageURLObject
,这个对象有属性
objectUrlImage
,当我创建这个对象时属性
objectUrlImage
为零,因为图像url还没有设置,当属性有实际值时,我如何执行选择器?这不是一个方法,因为我不知道延迟属性在什么时候变为非零。

你的问题不清楚。但是如果我做对了,你应该在setter中为属性做你想做的事情

- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
    _objectUrlImage = objectUrlImage;
    // Do something here, e.g. post notification, send a message to a delegate...
}

你的问题不清楚。但是如果我做对了,你应该在setter中为属性做你想做的事情

- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
    _objectUrlImage = objectUrlImage;
    // Do something here, e.g. post notification, send a message to a delegate...
}
可以使用(KVO)检测对象属性的更改

ImageURLObject
的setter中,需要使用
willChangeValueForKey
didChangeValueForKey
执行通知:

- (void)setObjectUrlImage:(NSURL *)url
{
    [self willChangeValueForKey:@"objectUrlImage"];
    _objectUrlImage = url;
    [self didChangeValueForKey:@"objectUrlImage"];
}
并从您想要的地方对该财产进行观察:

[imageUrlObject addObserver:self
                 forKeyPath:@"objectUrlImage"
                    options:NSKeyValueObservingOptionNew
                    context:NULL];
观察结果将通过以下方法通知:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if (object == imageUrlObject && [keyPath isEqualToString:@"objectUrlImage"])
    {
        // URL changed
    }
}
不要忘记在观察者的
dealloc
方法中删除对属性的观察:

- (void)dealloc
{
    [imageUrlObject removeObserver:self
                        forKeyPath:@"ObjectUrlImage"];
}
(请注意,这是在ARC环境中为数不多的子类化
dealloc
的原因之一)。

您可以使用(KVO)来检测对象属性的更改

ImageURLObject
的setter中,需要使用
willChangeValueForKey
didChangeValueForKey
执行通知:

- (void)setObjectUrlImage:(NSURL *)url
{
    [self willChangeValueForKey:@"objectUrlImage"];
    _objectUrlImage = url;
    [self didChangeValueForKey:@"objectUrlImage"];
}
并从您想要的地方对该财产进行观察:

[imageUrlObject addObserver:self
                 forKeyPath:@"objectUrlImage"
                    options:NSKeyValueObservingOptionNew
                    context:NULL];
观察结果将通过以下方法通知:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if (object == imageUrlObject && [keyPath isEqualToString:@"objectUrlImage"])
    {
        // URL changed
    }
}
不要忘记在观察者的
dealloc
方法中删除对属性的观察:

- (void)dealloc
{
    [imageUrlObject removeObserver:self
                        forKeyPath:@"ObjectUrlImage"];
}

(请注意,这是在ARC环境中为数不多的子类化
dealloc
的原因之一)。

实际上,您的问题是什么?不清楚这个问题根本无法理解,例如:(!ImageURLObject.objectUrlImage)只要ImageURLObject.objectUrlImage有值,就在前台等待。@LightNight在下面发布了答案。设置属性值后,您可以立即向代理发送通知或消息。这不需要执行选择器即可实现。当对象不是nil时,您可以返回通知,或者只设置一个计时器并检查对象,然后在发现时执行代码。实际上,您的问题是什么?不清楚这个问题根本无法理解,例如:(!ImageURLObject.objectUrlImage)只要ImageURLObject.objectUrlImage有值,就在前台等待。@LightNight在下面发布了答案。设置属性值后,您可以立即向代理发送通知或消息。这不需要执行选择器即可实现。您可以在对象不是nil时返回通知,也可以只设置计时器并检查对象,然后在找到时执行代码。