UINavigationController の (読み取り専用) visibileViewController プロパティを観察しようとしましたが、成功しませんでした。別のクラスでのテスト目的で自分で定義した readwrite プロパティを正常に観察できました。
読み取り専用属性を観察することは可能ですか?
UINavigationController の (読み取り専用) visibileViewController プロパティを観察しようとしましたが、成功しませんでした。別のクラスでのテスト目的で自分で定義した readwrite プロパティを正常に観察できました。
読み取り専用属性を観察することは可能ですか?
はい。独自のクラスに実装する簡単な方法は、プロパティを .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
確かに読み取り専用プロパティを確認できますが、KVO が機能するには KVC に準拠する必要があることに注意してください。つまり、プロパティにセッター/ゲッターを使用することを意味します (読み取り専用であるため、無料でセッターを取得することはできません)。@synthesize
) またはプロパティの-setValue:forKey:
メソッドを介して。
少し異なる答え:
@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