Objective c 神秘地被改变的变量
所以,这是我之前问题的后续部分。我遇到了一个奇怪的错误,弄不清出了什么问题。基本上,我编写了以下代码来检测文本何时输入到文本框中,并相应地更改变量:Objective c 神秘地被改变的变量,objective-c,cocoa,Objective C,Cocoa,所以,这是我之前问题的后续部分。我遇到了一个奇怪的错误,弄不清出了什么问题。基本上,我编写了以下代码来检测文本何时输入到文本框中,并相应地更改变量: -(void)controlTextDidChange:(NSNotification *)aNotification { NSTextView *fieldEditor = [[aNotification userInfo] objectForKey:@"NSFieldEditor"]; if ([[aNotification
-(void)controlTextDidChange:(NSNotification *)aNotification
{
NSTextView *fieldEditor = [[aNotification userInfo] objectForKey:@"NSFieldEditor"];
if ([[aNotification object] isEqualTo:[self idField]])
{
[self setIdNumber:[[fieldEditor textStorage] string]];
}
else if ([[aNotification object] isEqualTo:[self chapterField]])
{
[self setChapterNumber:[[fieldEditor textStorage] string]];
}
}
这将获取输入的文本,检查正在编辑的文本框,并根据编辑的文本框更改变量。问题是“else if..”代码块将变量chapterNumber和IdNumber更改为输入的文本,即使只有更改chapterNumber的代码。我就是想不出是怎么回事…您遇到了这个问题,因为您的两个setter方法
setIdNumber:
和setChapterNumber:
没有复制字段编辑器中的字符串,而只是指向它
您可能知道,字段编辑器是一个NSTextView
,可供当前具有焦点的文本字段重用。它始终是同一个对象,并且该对象的字符串
会根据其附加到的文本字段而更改
向字段编辑器的字符串
分配变量时,您是在分配指针;现在分配的任何变量都有该字符串的地址。由于字段编辑器始终是同一个对象,因此即使内容发生更改,字符串的地址也保持不变,因此您拥有的任何指针(您为该字符串指定的任何变量)都会显示为更改其值
如果您使用字段编辑器字符串的内容、使用
copy
或stringWithString:
或其他方法创建一个新字符串,那么您将在字段编辑器无法更改的地址处获得一个新对象,无论字段编辑器发生什么情况,您为其分配了副本的每个变量都将继续在复制的字符串中生成值。检查您的IBOutlet连接?如图所示,这没有什么问题。您在哪里以及如何检查这两个变量的值?IBOutlet似乎连接正确。我在设置变量前后立即使用NSLog语句检查变量的值,这就是我如何隔离对这部分代码的更改的方法。因此,我似乎已经解决了问题,尽管我不确定为什么会这样。本质上,我更改了set语句以使用NSString的方法StringWithString…好的,我知道出了什么问题。这以前咬过我。您只说else if
块同时更改了IDNumber
和chapterNumber
,这让我感到困惑。但实际上,if
的任一块都会改变这两个值。