Я работаю с ArcGIS Runtime для 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
с действительным AGSTile
, это я получаю InvalidCastException
говоря, что это Cannot cast from source type to destination type
. Я также попробовал просто иметь свой AGSTileOperation, функционально эквивалентный AGSTileOperationProtocol
выше, но с NSOperation
BaseType
, как с [Model]
, так и без него.
Каков наилучший способ справиться с привязками метода, например - (NSOperation<AGSTileOperation>*)retrieveImageAsyncForTile:(AGSTile*)tile;
?
Я пробовал несколько альтернатив, подобных Monotouch binding - "Cannot cast from source type to destination type.", но их проблема никогда не была решена.
Любая помощь была бы принята с благодарностью.
Update # 1
Если изменить тип возвращаемого RetrieveImageAsyncForTile
от AGSTileOperation
к NSOperation
возвращается правильно, и в обязательном порядке, но отсутствует свойство дополнительного (требуется). Это дало мне еще одну идею, которая, как я думал, может дать некоторое дополнительное понимание, но, к моему удивлению, несмотря на то, что я думал, что это невозможно, это произошло.
[BaseType (typeof (NSOperation))]
interface AGSTileOperation
{}
Что я понял, так как она не имеет дополнительных свойств или методов поверх NSOperation
, должны быть эквивалентны, но это тоже давшие InvalidCastException
.
Надеюсь, у кого-то есть представление, как я могу обойти это?
Это не похоже на ответ – smerny
Да, вы правы, но для меня не существует ссылки «Добавить комментарий» в разделе вопросов выше. В любом случае, я видел экземпляры этой формы при выполнении моей собственной привязки - я, вероятно, столкнусь с той же проблемой в какой-то момент. –
Эй, Вернон, я определенно рекомендую некоторые указатели. Получите ObjectiveSharpie. Это даст вам 90% пути на большинстве ваших привязок. В вашей 'linkwith.cs' попробуйте этот' LinkWith' '[сборка: LinkWith (« libArcGIS.a », LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, IsCxx = true, ForceLoad = true, Frameworks =" CoreGraphics, CoreLocation, CoreText, Foundation, QuartzCore, MediaPlayer, MobileCoreServices, OpenGLES, Security, UIKit ", LinkerFlags =" -lz -all_load -ObjC ")]' –