C# 单触式NSClassFromString

C# 单触式NSClassFromString,c#,.net,objective-c,ios,xamarin.ios,C#,.net,Objective C,Ios,Xamarin.ios,我尝试在MonoTouch中使用如下Objective-C代码: if(NSClassFromString(@“ADBannerView”) C#中的等价物是什么 基本上我想使用iAd,但我需要检查ADBannerView和adInterstitalAD的存在,因为它们在所有版本的操作系统上都不可用。(我更愿意做功能检查,而不是iOS版本检查) 我认为这在其他情况下也会有帮助。这个人问了这个问题并回答了。看起来您需要编译器标志: 看看这个: 否则你可以 最后,您可以使用与我相同的谷歌搜索: 如果

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

if(NSClassFromString(@“ADBannerView”)

C#中的等价物是什么

基本上我想使用iAd,但我需要检查
ADBannerView
adInterstitalAD
的存在,因为它们在所有版本的操作系统上都不可用。(我更愿意做功能检查,而不是iOS版本检查)


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

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

看看这个:

否则你可以

最后,您可以使用与我相同的谷歌搜索:


如果这不起作用,MonoTouch的一名员工通常会检查MonoTouch标记的问题,这确实很有帮助。

最近的MonoTouch将始终提供
ADBannerView
,因此您无法使用与
Type.GetType
相当的C来查询可用性

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

bool available = UIDevice.CurrentDevice.CheckSystemVersion (4, 0);
对于任何4.0+版本的iOS,将返回true(4.0表示iOS中添加了
ADBannerView
时)

一种可能的替代方法(可能不适用于所有情况)是创建一个实例并检查其句柄。由于ObjC是基于消息的发送
init
将返回null(这是.NET构造函数无法做到的)。例如

请注意,您最好使用
来处理视图,或者将其集成到
ADBannerView
的正常创建中


UPDATE:当然p/invoke to的作用与ObjectiveC代码完全相同:-)

我只需要从C#调用
NSClassFromString
。你们的解决方案并不是我所需要的——我正在构建一个定制的广告框架,我需要检测iAd的特定功能是否可用。例如,
adInterstitalAD
是在iOS 4.2或其他版本中引入的(请不要引用我的话),因此我需要检测到这一点,并从其他提供商那里提供一个回填的广告。由于MonoTouch类始终存在,因此在具有的程序集中检查类始终为true。您有p/invoke的示例吗?这是否有效:
[dlliport(Constants.FrameworkLibrary)]公共静态外部IntPtr NSClassFromString(string className)
我没有尝试过,但应该是
[DllImport(Constants.FoundationLibrary)]
,否则它看起来就像我要尝试的(抱歉打包wwdc;-)完成后,我会给你发送一个pro版本的优惠券代码,谢谢。从那以后,我发现:
MonoTouch.ObjCRuntime.Class.GetHandle(“ADBannerView”)
我认为这应该是首选。
bool available = (new ADBannerView ().Handle != IntPtr.Zero);