IOS 5 UIDocument 子类向后兼容吗?

Posted

技术标签:

【中文标题】IOS 5 UIDocument 子类向后兼容吗?【英文标题】:Is IOS 5 UIDocument subclass backwards compatible? 【发布时间】:2011-10-31 22:09:04 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

if (NSStringFromClass(@"UIDocument")) 

    ...

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

【讨论】:

感谢您的回答。我不想在 iOS4 上使用 UIDocument,只是不确定是否可以定义一个 iOS5 子类,而不会使整个程序无法在以前的版本上启动。我对您的有用答案的理解是,只要我确保 UIKit 是弱链接(+在实际使用之前检查版本或类是否存在)就应该没问题,所以这似乎是在 a 中实现 iCloud 功能的正确通用解决方案向后兼容的方式。 完成。实际上,只要您设置正确的 Xcode 目标(例如 OS 3.1),默认链接设置就可以正常工作(新代码自动弱链接)。已确认此方法有效,但请注意手动弱链接 libSystem.dylib 否则使用最新 XCode 构建的代码将在 OS 3.x 上崩溃(因为“块”)【参考方案2】:

它需要与 UIDocument 链接才能理解子类化 UIDocument 的实际含义。例如,如果你有类 Bar,它是 Foo 的子类,而 Foo 有方法“doBaz”,你可以在 Bar 实例上调用“doBaz”,但如果链接器不知道 Foo,它就不知道 Bar 可以做 doBaz。

你也许可以做一个弱链接。 iOS 4 出来的时候也有类似的情况,iOS 3 没有 iAds,这是当时 iPad 上最好的。

【讨论】:

这取决于 UIDocument 是否可以被弱链接。既然它是 UIKit 的一部分,那么我认为是的,不是的。

以上是关于IOS 5 UIDocument 子类向后兼容吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5 Asset Catalog 是不是向后兼容 pre-iOS 7?

如何创建一个向后兼容iOS 5.0的新Xcode 5项目? - 错过故事板错误

iOS 5 中关于 UIDocument 的说明

如何使 iOS 7 应用向后兼容?

UIRefreshControl 向后兼容

Apple iOS 是不是支持向后兼容?