IOS 5 UIDocument子类向后兼容?

IOS 5 UIDocument子类向后兼容?

问题描述:

为了支持iCloud,我们鼓励使用UIDocument子类。如果我定义了一个新的子类,请将项目目标版本设置为3.0,并在使用我的新子类之前测试iOS 5的使用情况,代码是否可以在iOS 4上运行,或者在子类中进行链接是否可以实现向后兼容?IOS 5 UIDocument子类向后兼容?

UIKit可以弱链接,但如果您尝试初始化UIDocumentUIDocument子类,结果将不确定。你需要这样的东西:

if (NSStringFromClass(@"UIDocument")) 
{ 
    ... 
} 

这将使它完全无用于您的目的。所以你的问题的答案是否定的,涉及UIDocument的任何代码都不会运行,但是你可以对这样的代码进行条件检查。您最好找到另一种保存数据的方法。

+0

感谢您的回答。我不想在iOS4上使用UIDocument,只是不确定是否可以定义iOS5子类而不会使整个程序无法在以前的版本上启动。我对你有帮助的答案的理解是,只要我确信UIKit是弱链接的(+在实际使用之前检查版本或类的存在),它应该可以,因此,这似乎是在一个实施iCloud功能的正确通用解决方案向后兼容的方式。 – wordy

+0

然后请标记答案是正确的。 'c:' –

+0

完成。实际上,只要您设置了正确的Xcode目标(例如OS 3.1),默认链接设置就可以正常工作(新代码可以弱连接)。已经证实了这一点,但要小心手动的弱链接libSystem.dylib或用最新的XCode构建的代码将在OS 3.x上崩溃(因为“块”) – wordy

它需要链接UIDocument才能理解子类化UIDocument的实际含义。例如,如果您拥有Foo类的Bar类,并且Foo具有方法'doBaz',则可以在Bar实例上调用'doBaz',但如果链接器不知道Foo,它不知道Bar可以doBaz。

虽然你也许可以做一个薄弱环节。当iOS 4推出时也有类似的情况,iAds在iOS 3中不可用,这是当时iPad上最好的。

+0

所以答案是否定的。 –

+0

这取决于UIDocument是否可以弱链接。由于它是UIKit的一部分,我认为是的,不。 – wjl