我创建了bindings for AQGridView。该项目有一个委托和数据源协议。
类型AQGridView
会公开GridViewDataSource
和GridViewDelegate
属性。使用自定义类设置任一属性时,会从有界库(而不是运行时)中获取错误。有消息是:
-setDataSource的参数必须符合AQGridViewDataSource 协议
通过在objective-c库中调用“conformsToProtocol”手动抛出此错误。
- (void) setDataSource: (id<AQGridViewDataSource>) obj
{
if ((obj != nil) && ([obj conformsToProtocol: @protocol(AQGridViewDataSource)] == NO ))
[NSException raise: NSInvalidArgumentException format: @"Argument to -setDataSource must conform to the AQGridViewDataSource protocol"];
_dataSource = obj;
_flags.dataSourceGridCellSize = [obj respondsToSelector: @selector(portraitGridCellSizeForGridView:)];
}
委托没有必需的方法,因此很容易“符合”,对于数据源,我已经实现了所有必需的字段。所以问题是:
当我发送的托管类型继承正确类型并实现所需方法(如果有)时,为什么conformsToProtocol
在iOS中返回NO?
更新
我在c#类型上覆盖了ConformsToProtocol,以便让iOS类型的方法通过。
public override bool ConformsToProtocol (IntPtr protocol)
{
return true;
}
我仍然认为我不需要这样做,但它现在有效。
答案 0 :(得分:1)
您已正确完成此操作,即使它们从正确的绑定类/协议继承,我们当前也不会针对托管类自动响应conformsToProtocol为YES。