【问题标题】:Recommended way to test for iOS Version specific feature at runtime在运行时测试 iOS 版本特定功能的推荐方法
【发布时间】:2011-11-29 13:10:55
【问题描述】:

我的目标是 IOS 4.3 和 5.0 以及针对 5.0 SDK 构建的应用程序,并且希望仅当应用程序在 iOS5 设备上运行时添加对 iOS5 中引入的 Twitter 功能的支持。在运行时可靠地测试这些操作系统功能的可用性而不会导致应用崩溃的推荐方法是什么?

我知道你在 Objective-C 中使用 respondsToSelector 来做到这一点,但在 C# 中是如何做到的?

【问题讨论】:

    标签: c# iphone ios xamarin.ios versioning


    【解决方案1】:

    对于最新的 MonoTouch 版本,您可以使用以下代码:

            if (UIDevice.CurrentDevice.CheckSystemVersion (5, 0)) {
                window.RootViewController = navigation;
            } else {
                window.AddSubview (navigation.View);
            }
    

    否则,您可以从UIDevice.CurrentDevice.SystemVersion 获取string 并使用您自己的代码进行一些检查。

    【讨论】:

    • 好吧,虽然你可以用它来假设某个特性存在,但它并不是我正在寻找的“每个特性检查”,因为我们从网络上学到了什么:不要检查版本,测试功能。但如果这是唯一的方法,那就这样吧:)
    • 如果您想按功能检查,您可以执行bool feature_present = (new FeatureType ().Handle == IntPtr.Zero); 之类的操作,这应该适用于 weak 框架中的大多数新功能,但 YMMV .
    • 最新版本只是if (UIDevice.CurrentDevice.CheckSystemVersion(5, 0)),因为它已经返回一个布尔值。
    • @redent84 你是对的,那是旧的(测试版)API。新的有点不同,我更新了示例代码。谢谢!
    【解决方案2】:

    跟进cmets,包括我的……

    如果您想按功能检查,您可以执行以下操作:

            MonoTouch.Twitter.TWRequest req = new MonoTouch.Twitter.TWRequest ();
            if (req.Handle == IntPtr.Zero) {
                Console.WriteLine ("No Twitter support before iOS5");
            }
    

    创建TWRequest 实例的选择器将返回null,并且.NET 对象将以无效(不可用)状态创建,您可以使用Handle 属性进行查询。再次 YMMV,测试是关键:-)

    【讨论】:

    • 未来将无法创建此类无效对象(会抛出异常)。
    猜你喜欢
    • 2011-11-08
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多