在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