我正在尝试在MonoTouch中使用以下Objective-C代码:
if (NSClassFromString(@"ADBannerView"))
C#中的等价物是什么?
基本上我想要使用iAd,但我需要检查ADBannerView
和ADInterstitialAd
是否存在,因为它们并非在所有版本的操作系统上都可用。 (而且我宁愿进行功能检查而不是iOS版本检查)
我认为这在其他情况下也会有所帮助。
答案 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的其中一个人通常会检查单点标记的问题并且非常有帮助。