當結合的iOS lib.a爲Xamarin,我發現了以下錯誤:產生Objective Sharpie難度結合的iOS委託方法沒有參數
btouch: The delegate method Device.SomeDeviceDelegate.CaptureComplete needs to take at least one parameter (BI1003)
的綁定。
namespace Device
{
// @protocol SomeDeviceDelegate <NSObject>
[Protocol, Model, Preserve]
[BaseType(typeof(NSObject))]
interface SomeDeviceDelegate
{
// @optional -(void)CaptureComplete;
[Export("CaptureComplete")]
void CaptureComplete();
}
// @interface SomeDevice : NSObject
[Protocol, Model, Preserve]
[BaseType(typeof(NSObject), Delegates = new[] { "WeakDelegate" }, Events = new[] { typeof(SomeDeviceDelegate) })]
interface SomeDevice
{
[Wrap("WeakDelegate")]
SomeDeviceDelegate Delegate { get; set; }
// @property (assign, nonatomic) id<SomeDeviceDelegate> delegate;
[NullAllowed, Export("delegate", ArgumentSemantic.Assign)]
SomeDeviceDelegate WeakDelegate { get; set; }
}
}
NB。我已將名稱更改爲SomeDevice
以隱藏硬件/設備名稱(NDA)。
編譯器抱怨// @optional -(void)CaptureComplete;
和相應的綁定CaptureComplete()
沒有參數,它至少需要一個。
問:我需要做什麼來綁定這個委託?
我曾嘗試Binding Types Reference Guide並試圖運用
EventArgs
屬性NoDefaultValue
屬性DefaultValueFromArgument
屬性
UPDATE
我誤解了NoDefaultValue
和DefaultValueFromArgument
屬性,它們在代理返回一個值時使用(例如,因爲回報會干擾Xamarin包裝的事件。
這就是我的想法,但是ObjC簽名並不表示它確實如此。我嘗試向託管方法中添加一個參數,但是這又產生了另一個「註冊服務商」在進一步發現方法錯誤時發現了簽名不匹配。 – Dennis
我已經將':'添加到'[Export()]'並且它現在編譯。 – Dennis
不幸的是,在運行時''ObjCRuntime.RuntimeException:Wrapper類型'Device.SomeDeviceDelegate'缺少其原生的ObjectiveC類'SomeDeviceDelegate'。' – Dennis