1

我正在尝试绑定公开此方法的api(GoogleAnalytic v2 beta):

- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;

GAITracker 是一个协议,所以我的绑定包含这个定义

[BaseType (typeof (NSObject))]
[Model]
interface GAITracker 
{
...
}

[BaseType (typeof (NSObject))]
interface GAI 
{
  [Static][Export ("sharedInstance")]
  GAI SharedInstance { get; }

  [Export("trackerWithTrackingId:")]
  GAITracker TrackerWithTrackingId(string id);

  ...
}

当我调用 GAI.SharedInstance.TrackerWithTrackingId("MyId") 时,我得到了这个异常

System.InvalidCastException: Unable to cast object of type 'MonoTouch.Foundation.NSObject' to type 'GoogleAnalyticBETA.GAITracker'.

我发现的所有示例都使用协议作为委托(如此处所述),而不是作为方法的返回值。如何创建有效的绑定?

4

1 回答 1

0

你需要有这样的东西

[BaseType (typeof (NSObject))]
interface GAI 
{
  [Static][Export ("sharedInstance")]
  GAI SharedInstance { get; }

  [Export("trackerWithTrackingId:")]
  IntPtr TrackerWithTrackingId(string id);

  ...
}

然后使用它:

var ptr = GAI.SharedInstance.TrackerWithTrackingId("MyId");
var gaitracker = new GAITracker (ptr);

查看 Google Analytic 的现有单点触控绑定

https://github.com/mono/monotouch-bindings/blob/master/GoogleAnalytics/binding/googleanalytics.cs

于 2013-02-27T19:02:20.560 回答