6

我正在使用sharpie bind命令为我的iOS库获取 API 接口xamarin

sharpie bind --namespace=XXX --sdk=iphoneos9.2 Headers/*.h

@protocol绑定问题:

The type or namespace name `IProfileDelegate' could not be found. Are you missing an assembly reference?

这是它的生成方式:

    interface XLibrary : IProfileDelegate
    {
    [Wrap ("WeakProfileDelegate")]
    [NullAllowed]
    MB_ProfileDelegate ProfileDelegate { get; set; }

我知道它会创建空ProfileDelegate然后编译器或用方法填充它,但我的问题是IProfileDelegate找不到。

@protocol ProfileDelegate <NSObject>
@required
- (void)GetProfileFinished:(NSString*)_data;
- (void)SetProfileFinished:(NSString*)_data;
@end

这里的I符号差异(我猜这是为@protocols 保留的)。如何sharpie生成正确的 api 定义?

我能够删除所有I前缀并且它编译成功,但我宁愿修复它,不要在每次需要更新源库时重复此操作。

谢谢

4

2 回答 2

5

请记住,所有 obj-c 协议都充当接口或抽象类,我建议将“协议、模型和设置基类型设置为 nsobject”,另一件事是将所有方法或属性设置为“必需”,您需要将其指定为 Abstract

[Protocol, Model]
[BaseType (typeof(NSObject))]
interface myAwesomeDelegate
{
  [Abstract]
  [Export(...)]
  void myRequiredMethod(uint param1)

  [Export(...)]
  void anotherMethod()
}

希望这可以帮助您解决问题

于 2016-04-07T01:23:13.067 回答
-3

根据Objective Sharpie文档

在某些情况下,这些生成的文件可能就是您所需要的,但更多时候开发人员需要手动修改这些生成的文件,以修复工具无法自动处理的任何问题(例如标记为Verify 属性的问题)。

这意味着您有时必须调整生成的两个文件 ApiDefinitions.cs 和 StructsAndEnums.cs 来修复问题,例如本例中的一个。

您可以阅读更多关于绑定如何为 Objective-C 协议工作的信息,这些协议类似于 C# 接口,但在绑定文档中并不完全如此。

于 2016-04-06T11:21:02.220 回答