【发布时间】:2011-06-03 23:38:54
【问题描述】:
这似乎是一件简单的事情,但我的大脑今天似乎无法正常工作,而且我的搜索也没有找到有用的答案。
我有很多通过类别扩展 Cocoa 类的代码(它也是 open source)。有些方法想调用委托;旧代码使用非正式协议来执行此操作,但现在在构建目标 10.6 时,我收到警告:
warning: '-outlineView:menuForTableColumn:byItem:' not found in protocol(s)
例如,这里有一个类别:
@interface NSOutlineView (DSOutlineViewCategories)
- (NSMenu *)menuForEvent:(NSEvent *)event;
@end
使用非正式协议声明委托方法:
@interface NSObject (DSTableViewDelegate)
- (NSMenu *)outlineView:(NSOutlineView *)olv menuForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;
@end
实现在委托上调用它:
@implementation NSOutlineView (DSOutlineViewCategories)
- (NSMenu *)menuForEvent:(NSEvent *)event
{
NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil];
NSInteger column = [self columnAtPoint:point];
NSInteger row = [self rowAtPoint:point];
id item = [self itemAtRow:row];
if (column >= 0 && item && [[self delegate] respondsToSelector:@selector(outlineView:menuForTableColumn:byItem:)])
return [[self delegate] outlineView:self menuForTableColumn:[[self tableColumns] objectAtIndex:column] byItem:item];
else
return [super menuForEvent:event];
}
@end
如何为 10.6(及更高版本)更新此代码以避免“未在协议中找到”警告?
【问题讨论】:
标签: cocoa protocols categories nsoutlineview