我的代码中有几个不同的类使用相同的方法 - 导致大量重复的行 - 我最近发现了添加类别,这有望解决问题。为了给出一个较小的例子,我以前的方法(通常)以传统方式调用:
if((thisNum=[self valueInTextField:ctr]) != 0)
//... do stuff here...
- (int)valueInTextField:(int)tagNum
{
NSTextField *field = [[prizeWindow contentView] viewWithTag:tagNum];
int value = [field intValue];
return value;
}
我删除了上述方法并添加了类别:
@implementation NSTextField(GetFieldValue)
- (int)valueInTextField
{
NSTextField *field = [[[self window] contentView] viewWithTag:tagNum]; // DOESN'T LIKE THIS!!
return [self intValue];
}
@end
然而,它不喜欢我要求它使用[[self window] contentView]找到textField本身,所以我能让它工作的唯一方法是(显然)删除有问题的行并传递一些东西喜欢:
if([[[[self window]contentView]viewWithTag:ctr] valueInTextField] != 0)
我相信你能看到我在这里想要达到的目标。有没有什么方法可以让我的类别识别上面暗示的必填字段 - 即没有亲自自己传递它?在此先感谢: - )
答案 0 :(得分:2)
然而,它不喜欢我这么想 去找找textField本身 [[自我窗口] contentView]
您为每个- (int)valueInTextField
类别添加了NSTextField
方法
由于valueInTextField
是一个实例方法,因此您需要一个textfield对象来调用它
在文本域中搜索文本字段没有任何意义。 (鸡和蛋的困境)
- (int)valueInTextField
{
NSTextField *field = [[[self window] contentView] viewWithTag:tagNum]; // DOESN'T LIKE THIS!!
return [self intValue];
}
如上所述,在此处搜索文本字段将不起作用,因为您已经在文本字段中 除此之外,你还没有在这里使用字段变量。
你有多少文本字段?
也许用ivars和outlet来管理你的文本域更容易,而不是用标签来搜索它们。
答案 1 :(得分:2)
如果你发现自己需要很多窗口或窗口控制器的方法,那么放置类别的正确位置就是其中一个类。例如:
@implementation NSWindow(GetFieldValue)
- (int)valueInTextFieldWithTag:(int)tag
{
NSTextField *field = [[self contentView] viewWithTag:tag];
return [field intValue];
}
@end