MonoTouch NSClassFromString

jon*_*ers 5 .net c# objective-c xamarin.ios ios

我正在尝试在 MonoTouch 中使用如下 Objective-C 代码:

if (NSClassFromString(@"ADBannerView"))

C# 中的等价物是什么?

基本上我想使用 iAd,但我需要检查 和 是否存在ADBannerViewADInterstitialAd因为它们并非在所有版本的操作系统上都可用。(而且我宁愿进行功能检查而不是 iOS 版本检查)

我认为这在其他情况下也可能有帮助。

pou*_*pou 2

最近的 MonoTouch 将始终提供这样的功能ADBannerView,因此您无法使用相当于 C# 的方法Type.GetType来查询可用性。

通常,版本检查是检查功能的最佳方法。例如

bool available = UIDevice.CurrentDevice.CheckSystemVersion (4, 0);
Run Code Online (Sandbox Code Playgroud)

对于任何 4.0+ 版本的 iOS都将返回trueADBannerView (4.0 是添加到 iOS 时的版本)。

一种可能的替代方案(可能并非在所有情况下都有效)是创建一个实例并检查它的句柄。由于 ObjC 是基于消息的,发送init将返回 null(.NET 构造函数无法执行此操作)。例如

bool available = (new ADBannerView ().Handle != IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

请注意,您可能最好将上面的内容包围起来using以处理视图或将其集成到您的ADBannerView.

更新:当然 ap/invoke to 的作用ObjectiveC 代码完全相同NSClassFromString:-)

  • 从那时起,我发现: `MonoTouch.ObjCRuntime.Class.GetHandle ("ADBannerView")` 我认为这应该是首选。 (2认同)