首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sharpie绑定目标-c@协议问题

Sharpie绑定目标-c@协议问题
EN

Stack Overflow用户
提问于 2016-04-06 10:11:27
回答 2查看 1K关注 0票数 6

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

代码语言:javascript
复制
sharpie bind --namespace=XXX --sdk=iphoneos9.2 Headers/*.h

@protocol绑定有问题:

代码语言:javascript
复制
The type or namespace name `IProfileDelegate' could not be found. Are you missing an assembly reference?

它是这样产生的:

代码语言:javascript
复制
    interface XLibrary : IProfileDelegate
    {
    [Wrap ("WeakProfileDelegate")]
    [NullAllowed]
    MB_ProfileDelegate ProfileDelegate { get; set; }

我知道它会创建空的ProfileDelegate,然后编译器或其他什么东西填充它的方法,但我的问题是,IProfileDelegate没有找到。

代码语言:javascript
复制
@protocol ProfileDelegate <NSObject>
@required
- (void)GetProfileFinished:(NSString*)_data;
- (void)SetProfileFinished:(NSString*)_data;
@end

这里的差异在于I符号(我猜这是为@协议保留的)。如何使sharpie生成适当的api定义?

我能够删除所有的I前缀,并且编译成功,但我宁愿修复它,不要每次需要更新源代码库时都重复这一点。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-07 01:23:13

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

代码语言:javascript
复制
[Protocol, Model]
[BaseType (typeof(NSObject))]
interface myAwesomeDelegate
{
  [Abstract]
  [Export(...)]
  void myRequiredMethod(uint param1)

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

希望这能帮助你解决你的问题

票数 5
EN

Stack Overflow用户

发布于 2016-04-06 11:21:02

根据目标沙皮文件

在某些情况下,这些生成的文件可能是您所需要的全部,但是开发人员通常需要手动修改这些生成的文件,以修复工具无法自动处理的任何问题(例如使用验证属性标记的问题)。

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

您可以更多地了解如何为Objective协议绑定工作,它们类似于C#接口,但不是完全在绑定文档中

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36448006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档