Xamarin iOS委托BaseType用法

时间:2017-03-30 19:30:06

标签: xamarin binding xamarin.ios delegates nsobject

我只是想知道为什么绑定iOS项目中的委托必须使用BaseType(typeof(NSObject))属性,当它的iOS对应物不使用NSObject时

iOS代码:

@protocol TestDelegate

- (void)onSuccess:(NSString*)token;

@end

@interface Utility : NSObject

@property (nullable, weak, getter = getTestDelegate, setter = setTestDelegate:) id<TestDelegate> delegate;

@end

添加了代理事件映射的Sharpie代码:

[Protocol, Model]
public interface TestDelegate
{
    [Export ("onSuccess:")]
    void OnSuccess (string token);
}

[BaseType(typeof(NSObject),
      Delegates = new string[] { "WeakDelegate" },
      Events = new Type[] { typeof(TestDelegate) })
public interface Utility
{
    [Wrap ("WeakDelegate")]
    [NullAllowed]
    TestDelegate Delegate { [Bind ("getTestDelegate")] get; [Bind ("setTestDelegate:")] set; }

    [NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
    NSObject WeakDelegate { [Bind ("getTestDelegate")] get; [Bind ("getTestDelegate:")] set; }
}

Sharpie在TestDelegate上未生成BaseType属性,因为iOS本机代码未使用<NSObject&gt;在其协议中。

这失败了“类型或名称空间名称TestDelegate' does not exist in the namespace测试”。您是否缺少程序集引用?(CS0234)(Test.iOS)“。

当我在TestDelegate之上添加[BaseType(typeof(NSObject))]时,它就像魅力一样。

问题是为什么需要这个?

0 个答案:

没有答案