Xamarin.ios 由于其保护级别,无法访问ExportAttribute()

Xamarin.ios 由于其保护级别,无法访问ExportAttribute(),xamarin.ios,xamarin,Xamarin.ios,Xamarin,我正在将源代码转换为使用Xamarin.iOS统一api(相当痛苦的是…Xamarin)。目前我有一系列类似的错误: 由于其保护级别,无法访问ExportAttribute() 我知道现在已经没有公共的无参数构造函数了——那么我应该提供什么样的ExportAttribute构造函数来让它工作呢?我不是这段代码的原始作者,所以我不确定在这里该做什么。我有这样一种方法: [Foundation.Export()] private void CameraSnapshotComplete()

我正在将源代码转换为使用Xamarin.iOS统一api(相当痛苦的是…Xamarin)。目前我有一系列类似的错误:

由于其保护级别,无法访问ExportAttribute()

我知道现在已经没有公共的无参数构造函数了——那么我应该提供什么样的ExportAttribute构造函数来让它工作呢?我不是这段代码的原始作者,所以我不确定在这里该做什么。我有这样一种方法:

  [Foundation.Export()]
  private void CameraSnapshotComplete()
  {
  }
  UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete"));
UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete"));
在tihs情况下,我应该向ExportAttribute构造函数传递什么?此方法被发送到AnimationDidStop方法,如下所示:

  [Foundation.Export()]
  private void CameraSnapshotComplete()
  {
  }
  UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete"));
UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete"));

那么我是否要将“CameraSnapshotComplete”传递给构造函数?我有无数个这样的选项需要替换-因此在开始执行此操作之前,我希望得到一些反馈,并发现我做错了。

如果选择器名为
CameraSnapshotComplete
,则
[Export]
属性必须使用相同的名称。如果你这样称呼它:

  [Foundation.Export()]
  private void CameraSnapshotComplete()
  {
  }
  UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete"));
UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete"));
然后该方法应导出为:

[Foundation.Export("CameraSnapshotComplete")]
private void CameraSnapshotComplete()
{
}

在许多情况下,除了使用选择器之外,还有其他API替代方法,可以使代码更加强类型化(并避免难以调试的潜在打字错误)

了解有“更好”的方法来实现这一点。但是很多代码都是从MonoTouch时代回来的,现在重新编写它不是我们的选择。目前,这个端口有50万行代码要通过新的统一api。我理解:-)但是,作为一般规则,我希望我的答案适用于所有阅读它的人(今天或两年后)。FWIW,我已经为即将推出的Xamarin Studio 5.7编写了一些迁移代码,以自动迁移很多东西,虽然它并没有涵盖一切。