Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 神秘地被改变的变量_Objective C_Cocoa - Fatal编程技术网

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
的任一块都会改变这两个值。