В дополнение к другим предложениям о выборе порта распространенного приложения я предложил бы, чтобы Вы сделали порт настраивающимся в рамках Вашего приложения. Трудно кодированные номера портов являются плохой идеей, особенно при позже нахождении конфликта порта с другим приложением и потребностью изменить Ваш.
В методе menuForEvent вы можете узнать, в какой строке произошел щелчок. Вы можете передать это как параметр в свой метод defaultMenu - возможно, назовите его defaultMenuForRow:
-(NSMenu*)menuForEvent:(NSEvent*)evt
{
NSPoint pt = [self convertPoint:[evt locationInWindow] fromView:nil];
int row=[self rowAtPoint:pt];
return [self defaultMenuForRow:row];
}
Теперь вы можете создать меню для строки, которую вы нашли в событии ...
-(NSMenu*)defaultMenuForRow:(int)row
{
if (row < 0) return nil;
NSMenu *theMenu = [[[NSMenu alloc]
initWithTitle:@"Model browser context menu"]
autorelease];
[theMenu insertItemWithTitle:@"Add package"
action:@selector(addSite:)
keyEquivalent:@""
atIndex:0];
[theMenu insertItemWithTitle:[NSString stringWithFormat:@"Remove '%i'", row]
action:@selector(removeSite:)
keyEquivalent:@""
atIndex:0];
// you'll need to find a way of getting the information about the
// row that is to be removed to the removeSite method
// assuming that an ivar 'contextRow' is used for this
contextRow = row;
return theMenu;
}
Кроме того, как уже упоминалось в комментариях, вам действительно не следует использовать префикс NS в ваших собственных классах. В будущем есть вероятность столкновения, плюс это запутает всех, кто смотрит на ваш код, включая вас:)
Надеюсь, это поможет ...