gpt4 book ai didi

ios - 检查 MonoTouch 中 iOS 类(而不是方法)的可用性

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:40 26 4
gpt4 key购买 nike

MonoTouch 公开了 RespondsToSelector检查跨 iOS 版本方法可用性的方法。

但是我似乎无法找到如何对类(class)可用性执行类似的检查。
Apple documents it here在 iOS 4.2+ 中,您应该尝试访问所需类的静态 class 选择器。例如:

if ([EKReminder class]) 
{
....
}

然而,这似乎并没有暴露。我认为它类似于 my previous question here ,因为要在 MT 中实现它,需要在每个 MT 类型上显式映射 Class 静态属性。

所以我想我的问题是,我应该只使用旧的 iOS 4.2 之前的技术吗?即:

Class cls = NSClassFromString (@"EKReminder");
if (cls)
{
...
}

我认为映射到:

var iosClass = Class.GetHandle("EKReminder");
if ( iosClass != null )
...

或者使用 Messaging 中可用的互操作方法手动调用选择器?

或者我还没有找到的其他一些方法?

最佳答案

安全检查正在使用:

if (Class.GetHandle (typeof (EKReminder)) != IntPtr.Zero) {
// we know we can use EKReminder
}

然而,它有点昂贵,因为它涉及反射。 Objective-C 名称可以不同于 .NET 名称(例如 NSURLNSUrl 并且只能通过反射 Register 属性找到) .

如果您知道 Objective-C 名称,那么您可以使用非类型安全重载来跳过反射。例如

// checking for NSUrl would not work
if (Class.GetHandle ("NSURL") != IntPtr.Zero) {
// we know we can use NSUrl
}

再次强调(并概括我对每个人的回答)通常最好/更容易/更快地使用 iOS 版本来执行非硬件功能的运行时检查。

if (UIDevice.CurrentDevice.CheckSystemVersion (5,0)) {
// we know feature X was added in 5.0
}

关于ios - 检查 MonoTouch 中 iOS 类(而不是方法)的可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com