1

このメソッドを公開するAPI(GoogleAnalytic v2ベータ版)をバインドしようとしています:

- (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);

GoogleAnalyticの既存のモノタッチバインディングを見てください

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

于 2013-02-27T19:02:20.560 に答える