MonoTouch NSClassFromString

时间:2012-06-08 13:48:59

标签: c# .net objective-c ios xamarin.ios

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

if (NSClassFromString(@"ADBannerView"))

C#中的等价物是什么?

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

我认为这在其他情况下也会有所帮助。

2 个答案:

答案 0 :(得分:2)

最新的MonoTouch将始终提供ADBannerView,因此您无法使用等同于Type.GetType的C#来查询可用性。

通常,版本检查是检查功能的最佳方法。 E.g。

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围绕上述内容来处置视图或将其整合到ADBannerView的正常创建中。

更新:当然,对NSClassFromString的p / invoke 完全与ObjectiveC代码相同: - )

答案 1 :(得分:0)

这个人问了这个问题然后回答了。看起来你需要编译器标志:

检查出来:MonoTouch app with iAds runs on simulator, crashes on device

否则你可以Check for class in an assembly

最后,您可以使用我执行的相同Google搜索:monotouch ADBannerView assembly

如果这没有帮助,MonoTouch的其中一个人通常会检查单点标记的问题并且非常有帮助。