私は ArcGIS Runtime for iOS を使用しており、自分が行っているいくつかのことに対してバインディングを設定しようとしています。バインドしようとしているクラスは次のとおりです。
@interface AGSTiledLayer : AGSLayer {
@private
id<AGSTiledLayerTileDelegate> _tileDelegate;
NSOperationQueue *_operationQueue;
}
@property (nonatomic, assign) id<AGSTiledLayerTileDelegate> tileDelegate;
@property (nonatomic, retain, readonly) NSOperationQueue *operationQueue;
@property (nonatomic, retain, readonly) AGSTileInfo *tileInfo;
- (NSOperation<AGSTileOperation>*)retrieveImageAsyncForTile:(AGSTile*)tile;
@end
@protocol AGSTileOperation <NSObject>
@property (nonatomic, retain) AGSTile *tile;
@end
これらに基づいて、次のバインディング クラスを生成しました。
[BaseType (typeof (AGSLayer))]
interface AGSTiledLayer {
[Export ("tileDelegate")]
AGSTiledLayerTileDelegate TileDelegate { get; set; }
[Export ("operationQueue")]
NSOperationQueue OperationQueue { get; }
[Export ("tileInfo")]
AGSTileInfo TileInfo { get; }
[Export ("retrieveImageAsyncForTile:")]
AGSTileOperation RetrieveImageAsyncForTile (AGSTile tile);
}
[BaseType (typeof (NSObject))]
[Model]
interface AGSTileOperationProtocol {
[Export ("tile")]
AGSTile Tile { get; set; }
}
[BaseType (typeof (NSOperation))]
interface AGSTileOperation : AGSTileOperationProtocol
{}
RetrieveImageAsyncForTile
validでを呼び出すとAGSTile
、 it というInvalidCastException
ことわざが表示されCannot cast from source type to destination type
ます。また、 AGSTileOperation をAGSTileOperationProtocol
上記と機能的に同等にすることも試みましたが、NSOperation
BaseType
の有無にかかわらず、 があり[Model]
ます。
などのメソッドバインディングを処理する最良の方法は何- (NSOperation<AGSTileOperation>*)retrieveImageAsyncForTile:(AGSTile*)tile;
ですか?
Monotouchバインディングに似たいくつかの代替手段を試しました-「ソースタイプから宛先タイプにキャストできません。」、しかし、彼らの問題は決して解決されたようには見えませんでした。
どんな助けでも大歓迎です。
更新 #1
の戻り値の型をRetrieveImageAsyncForTile
からAGSTileOperation
に変更するNSOperation
と、適切に返されますが、追加の (必須) プロパティが欠落しています。これにより、追加の洞察が得られると思われる別のアイデアが得られましたが、驚いたことに、失敗する可能性はないと思っていたにもかかわらず、実際に成功しました。
[BaseType (typeof (NSOperation))]
interface AGSTileOperation
{}
の上に追加のプロパティやメソッドがないため、NSOperation
同等であるはずですが、InvalidCastException
.
うまくいけば、誰かがこれを回避する方法を知っていますか?