如何处理cocoa中的警告未知转义序列“\040”

如何处理cocoa中的警告未知转义序列“\040”,cocoa,xcode,warnings,Cocoa,Xcode,Warnings,我在Cocoa应用程序中运行的一些应用程序描述中出现了以下警告: 我已经尝试了所有我能想到的方法来消除这个错误,比如完全重写它,从另一个没有警告的类似脚本复制和粘贴,等等。但是我无法摆脱它。谁能告诉我哪里出了问题 我使用的原始代码是: NSString *theCellRefScript = [NSString stringWithFormat:@"tell application \"Numbers\"\n\

我在Cocoa应用程序中运行的一些应用程序描述中出现了以下警告:

我已经尝试了所有我能想到的方法来消除这个错误,比如完全重写它,从另一个没有警告的类似脚本复制和粘贴,等等。但是我无法摆脱它。谁能告诉我哪里出了问题

我使用的原始代码是:

NSString *theCellRefScript = [NSString stringWithFormat:@"tell application \"Numbers\"\n\
                                                tell document 1 \n\
                                                tell sheet \"%@\" \n\
                                                tell table \"%@\" \n\
                                                set value of cell \"%@\" to \%@\ \n\
                                                end tell \n\
                                                end tell \n\
                                                end tell \n\
                                                end tell ", theSheet, theTable, theCell, [theDistributionValues objectAtIndex:k]];

在最后一个反斜杠之后的一行末尾有一个尾随空格。它认为你在试图逃离一个空间,而不是加入队伍


编辑:我甚至会告诉你我是怎么知道的,这样下次你就知道了。从错误文本中,“040”是一个八进制数。转换为十进制,4*8=32,ASCII 32=空格。空格不是有效的转义字符。一些编辑器有一个“显示空白”模式,它将显示选项卡和空格,以帮助消除此类问题。

在最后一个反斜杠后的一行末尾有一个尾随空格。它认为你在试图逃离一个空间,而不是加入队伍


编辑:我甚至会告诉你我是怎么知道的,这样下次你就知道了。从错误文本中,“040”是一个八进制数。转换为十进制,4*8=32,ASCII 32=空格。空格不是有效的转义字符。一些编辑器有一个“显示空白”模式,它将向您显示选项卡和空格,以帮助消除此类问题。

发现问题,在单元格起始设置值的行上有一个非法空格。工作版本为:

set value of cell \"%@\" to \%@\\n\

发现问题时,有一个游荡空间上的行起始单元格设置值。工作版本为:

set value of cell \"%@\" to \%@\\n\

首先不要对这种问题敞开心扉

Objective-C与所有现代C编译器一样,如果字符串文本由空格分隔,则会自动连接起来。使用以下命令,而不是带有尾随斜杠的多行命令:

 NSString *theCellRefScript = [NSString stringWithFormat:@"tell application \"Numbers\"\n"
                                                "tell document 1\n"
                                                "tell sheet \"%@\ \n"
                                                "tell table \"%@\ \n"
                                                "set value of cell \"%@\" to \%@ \n"
                                                "end tell\n"
                                                "end tell\n"
                                                "end tell\n"
                                                "end tell", theSheet, theTable, theCell, [theDistributionValues objectAtIndex:k]];

首先不要对这种问题敞开心扉

Objective-C与所有现代C编译器一样,如果字符串文本由空格分隔,则会自动连接起来。使用以下命令,而不是带有尾随斜杠的多行命令:

 NSString *theCellRefScript = [NSString stringWithFormat:@"tell application \"Numbers\"\n"
                                                "tell document 1\n"
                                                "tell sheet \"%@\ \n"
                                                "tell table \"%@\ \n"
                                                "set value of cell \"%@\" to \%@ \n"
                                                "end tell\n"
                                                "end tell\n"
                                                "end tell\n"
                                                "end tell", theSheet, theTable, theCell, [theDistributionValues objectAtIndex:k]];

这让我发疯,因为我真的看不见。在我的例子中,它变得相当简单:在我的帮助文本中,我写了一个特定的选项将跳过所有空格-我举了一个例子

"\ "
当然,这变成了:

"\"\ \""
这在视觉上一点也不明显。。。但是中间的反斜杠也需要被逃脱:

"\"\\ \""

HTH

这让我发疯,因为我真的看不见它。在我的例子中,它变得相当简单:在我的帮助文本中,我写了一个特定的选项将跳过所有空格-我举了一个例子

"\ "
当然,这变成了:

"\"\ \""
这在视觉上一点也不明显。。。但是中间的反斜杠也需要被逃脱:

"\"\\ \""

HTH

Graham,我已经检查了每一行,没有尾随空格。问题实际上发生在一条直线的中间,而不是在末端。我认为这是一个线端,因为错误显示在线端附近。不管怎样,很高兴你明白了!格雷厄姆,我已经检查了每一行,没有尾随空格。问题实际上发生在一条直线的中间,而不是在末端。我认为这是一个线端,因为错误显示在线端附近。不管怎样,很高兴你明白了!这些空白问题几乎是看不见的。