在Key-Value Observing Programming Guide中,Registering for Key-Value Observing部分指出:「如果Apple等提供的框架中的屬性記錄爲如此,那麼它們通常只具有KVO兼容性。」但是,我沒有在文檔中找到任何記錄爲KVO兼容的屬性。你能指點我一些嗎?iOS:如何知道某個媒體資源是否符合KVO標準?
具體而言,我想知道UIWindow
的@property(nonatomic,retain) UIViewController *rootViewController
是否符合KVO。原因是我將rootViewController
屬性添加到UIWindow
對於iOS < 4,並且想知道我是否應該使其符合KVO。
@interface UIWindow (Additions)
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_4_0
@property (nonatomic, retain) UIViewController *rootViewController;
#endif;
@end
@implementation UIWindow (Additions)
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_4_0
@dynamic rootViewController;
- (void)setRootViewController:(UIViewController *)newRootViewController {
if (newRootViewController != _rootViewController) {
// Remove old views before adding the new one.
for (UIView *subview in [self subviews]) {
[subview removeFromSuperview];
}
[_rootViewController release];
_rootViewController = newRootViewController;
[_rootViewController retain];
[self addSubview:_rootViewController.view];
}
}
#endif
@end
很酷,謝謝!那麼,作爲後續問題,代碼看起來是否正確?這是我第一次通過類別添加伊娃。 – ma11hew28
@MattDiPasquale編輯答案:) –
嗯......是的,我無法編譯它的iPhone 4.3.1設備。我得到了'爲架構的ARMv6未定義的符號: 「_OBJC_IVAR _ $ _ UIWindow._rootViewController」,從引用: - [一個UIWindow(添加)setRootViewController:在一個UIWindow + Additions.o LD:符號(S)沒有發現架構的ARMv6 collect2:ld返回1退出狀態。所以,我想爲iOS 3.2創建子類。多一點代碼,但是應該這樣做!謝謝! – ma11hew28