0

私はImageURLObjectオブジェクトを持っています。このオブジェクトにはプロパティがあります。このオブジェクトobjectUrlImageを作成すると、プロパティobjectUrlImageは nil になります。画像の URL がまだ設定されていないため、プロパティに実際の値がある場合にセレクターを実行するにはどうすればよいですか? [self performSelector: withObject: afterDelay:]どの遅延プロパティが nil ではなくなった後かわからないため、メソッドではありません。

4

2 に答える 2

3

Key-Value Observing (KVO) を使用して、オブジェクトのプロパティの変更を検出できます。

のセッターでは、andImageURLObjectを使用して通知を実行する必要があります。willChangeValueForKeydidChangeValueForKey

- (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"];
}

dealloc(これは、ARC 環境でサブクラス化する数少ない理由の 1 つです)。

于 2013-06-07T11:23:21.677 に答える
0

あなたの質問は明確ではありません。しかし、私が正しく理解できれば、プロパティのセッターで必要なことを行う必要があります。

- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
    _objectUrlImage = objectUrlImage;
    // Do something here, e.g. post notification, send a message to a delegate...
}
于 2013-06-07T11:11:39.830 に答える