处理未实现的协议所需方法的更好解决方案

时间:2014-09-28 08:17:41

标签: ios objective-c exception-handling datasource protocols

当协议所需的方法没有实现时,Xcode只会发出警告

Warning: method 'xxx' in protocol 'xxx' not implemented

我有一个自定义视图,例如UITableView,其dataSource属性。为了确保dataSource不是nil并且响应方法,我这样做

NSAssert(self.dataSource != nil, @"menu's dataSource shouldn't be nil");
if ([self.dataSource respondsToSelector:@selector(menu:numberOfRowsInColumn:)]) {
    return [self.dataSource menu:self
            numberOfRowsInColumn:self.currentSelectedMenudIndex];
} else {
    NSAssert(0 == 1, @"required method of dataSource protocol should be implemented");
    return 0;
}

我想知道是否有更优雅的方法来处理所需方法的缺失?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这个解决方案对我来说很好,因为可以对生产代码禁用断言,使其成为仅限开发人员的健全性检查。

如果协议可以由第三方代码(即某种插件)实现,则应该引发异常。

然而,稍微更容易断言代码和理解将是简单的:

NSAssert(NO, @"blah blah blah");