如何在cocoa中处理警告未知转义序列'\ 040'

时间:2010-09-13 20:52:50

标签: cocoa xcode warnings

我在Cocoa应用程序中运行的一些Applescripts中弹出以下警告:

http://emberapp.com/splash6/images/unknown-escape-sequence-error/sizes/m.png

我已经尝试了一切我能想到的删除错误,例如完全重写它,从另一个没有警告等的类似脚本复制和粘贴但我无法摆脱它。谁能告诉我哪里可能出错了。

我正在使用的原始代码是:

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]];

4 个答案:

答案 0 :(得分:8)

首先不要让自己陷入这种问题。

与所有现代C编译器一样,Objective-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]];

答案 1 :(得分:4)

在最后一个反斜杠之后,在行尾有一个尾随空格。它认为你正试图逃离一个空间,而不是连接线。

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

答案 2 :(得分:0)

发现问题后,线上有一个流氓空间开始设置单元格值。工作版本是:

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

答案 3 :(得分:0)

这让我疯了,因为我真的无法看到它。在我的情况下,它变得相当简单:在我的帮助文本中,我写过某个选项会逃避所有空格 - 我举了一个例子,

"\ "

当然这就像是:

"\"\ \""

它在视觉上并不明显......但中间的反斜杠也需要转义:

"\"\\ \""

HTH