19

UINavigationController の (読み取り専用) visibileViewController プロパティを観察しようとしましたが、成功しませんでした。別のクラスでのテスト目的で自分で定義した readwrite プロパティを正常に観察できました。

読み取り専用属性を観察することは可能ですか?

4

5 に答える 5

15

はい。独自のクラスに実装する簡単な方法は、プロパティを .h ファイルで読み取り専用として宣言し、.m ファイルのプライベート インターフェイスで書き込み可能として再宣言することです。そうすれば、変更通知を合成して自動的に処理することができます。

.h ファイル内:

@interface MyClass : NSObject
@property (nonatomic, readonly) BOOL foo;
@end

.m ファイル内

@interface MyClass ()
@property (nonatomic, readwrite) BOOL foo;
@end

@implementation MyClass

@synthesize foo;

- (void)bar {
    // Observers will see the change
    self.foo = YES;
}

@end
于 2012-08-11T21:24:00.927 に答える
2

確かに読み取り専用プロパティを確認できますが、KVO が機能するには KVC に準拠する必要があることに注意してください。つまり、プロパティにセッター/ゲッターを使用することを意味します (読み取り専用であるため、無料でセッターを取得することはできません)。@synthesize) またはプロパティの-setValue:forKey:メソッドを介して。

于 2009-02-16T07:24:43.717 に答える
0

少し異なる答え:

@interface MyClass : NSObject
@property (nonatomic, readonly) BOOL foo;
@end

.m ファイル内

@interface MyClass ()
@property (nonatomic, readwrite) BOOL foo;
@end

@implementation MyClass

+ (NSSet *)keyPathsForValuesAffectingFoo {
    return [[NSSet alloc] initWithObjects:NSStringFromSelector(@selector(foo)), nil];
}

@end
于 2014-05-10T15:00:42.417 に答える