1

我已经为 AQGridView 创建了绑定。该项目有一个委托和数据源协议。

该类型AQGridView公开了一个GridViewDataSourceGridViewDelegate属性。使用自定义类设置任一属性时,会从有界库(而不是运行时)抛出错误。有消息是:

-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;
}

我仍然认为我不需要这样做,但它现在有效。

4

1 回答 1

1

您做得对,对于托管类,我们目前不会自动以 YES 响应conformsToProtocol,即使它们继承自正确的绑定类/协议。

于 2013-06-25T22:36:15.100 回答