我已经为 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;
}
我仍然认为我不需要这样做,但它现在有效。