我创建了 bindings for AQGridView .该项目有一个委托(delegate)和数据源协议(protocol)。
AQGridView
类型公开了一个GridViewDataSource
和GridViewDelegate
属性。使用自定义类设置任一属性时,会从有界库(而非运行时)中抛出错误。有留言是:
Argument to -setDataSource must conform to the AQGridViewDataSource protocol
此错误是通过在 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:)];
}
委托(delegate)没有必须的方法,所以很容易“符合”,而对于数据源,我已经实现了所有的必填字段。所以问题是:
为什么当我发送的托管类型继承自正确的类型并实现所需的方法(如果有)时,conformsToProtocol
在 iOS 中返回 NO?
更新
我已经在我们的 c# 类型上覆盖了 ConformsToProtocol 以获取要传递的 iOS 类型中的方法。
public override bool ConformsToProtocol (IntPtr protocol)
{
return true;
}
我仍然认为我不需要这样做,但现在可以了。
最佳答案
您做对了,对于托管类,我们目前不会自动使用 YES 响应 conformsToProtocol,即使它们继承自正确的绑定(bind)类/协议(protocol)也是如此。
关于c# - MonoTouch conformsToProtocol=False 对于有效协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17305139/