我正在尝试在 MonoTouch 中使用诸如以下 Objective-C 的代码:
if (NSClassFromString(@"ADBannerView"))
C# 中的等价物是什么?
基本上我想使用 iAd,但我需要检查 ADBannerView
和 ADInterstitialAd
是否存在,因为它们并非在所有版本的操作系统上都可用. (与 iOS 版本检查相比,我更愿意进行功能检查)
我认为这在其他情况下也会有所帮助。
最佳答案
最近的 MonoTouch 将始终提供 ADBannerView
,因此您无法使用 C# 等效的 Type.GetType
来查询可用性。
通常情况下,版本检查是检查功能的最佳方式。例如
bool available = UIDevice.CurrentDevice.CheckSystemVersion (4, 0);
将为任何 4.0+ 版本的 iOS 返回 true(4.0 是 ADBannerView
被添加到 iOS 时)。
一种可能的替代方法(可能并非在所有情况下都有效)是创建一个实例并检查它的句柄。由于 ObjC 是基于消息的,因此发送 init
将返回 null(这是 .NET 构造函数无法做到的)。例如。
bool available = (new ADBannerView ().Handle != IntPtr.Zero);
请注意,您最好将上面的内容用 using
来处理 View 或将其集成到 ADBannerView
的正常创建中。
更新:当然是对 NSClassFromString
的 p/调用将与 ObjectiveC 代码完全一样:-)
关于c# - MonoTouch NSClassFromString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10950117/