【问题标题】:\ converts to \\ while reading from plist\ 从 plist 读取时转换为 \\
【发布时间】:2014-06-16 10:46:40
【问题描述】:

我正在使用arrayWithContentsOfFile方法创建一个数组,如下图:

NSArray *temp = [NSArray arrayWithContentsOfFile:mBackupSetFilePath];

上述语法在正常情况下可以正常工作,但如果 .plist 包含 C\D、C\\D 等数据,则它会转换为 C\\D、C\\\\D。

将此数组传递给函数,在该函数中,这些值显示为 C\\D、C\\\\D。而不是 C\D, C\\D 。

【问题讨论】:

  • 请显示该文件中的内容。
  • 确实,在日志控制台上 \ 将显示为 \\ 因为这是一个转义字符。但在引擎中,它们按原样存储在文件中。
  • @holex 同意你的观点,但我正在寻找一种按原样读取内容的方法,一种解决方案是迭代数组并为每个对象使用 - stringByReplacingOccurrencesOfString:@"\\\\" withString:@ “\\”,但我认为它不可行。
  • @akhilshrivastav,通常您按原样阅读内容(在控制台上打印是另一个问题),如果您调用方法stringByReplacingOccurrencesOfString:withString:,那么您将修改原始内容。这是你的目标吗?
  • @holex 目标是读取 plist 中的内容,以便我可以将其写入某个文本文件。

标签: ios objective-c macos cocoa-touch cocoa


【解决方案1】:

控制台日志正在消除转义字符。只是写了一个简单的测试来验证。

AppDelegate 的内容:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    NSArray *plist = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"]];
    [self takeArray:plist];
}

- (void)takeArray:(NSArray *)arr {
    NSLog(@"%@", arr);
}

plist 文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
        <string>/Users/Test/C\ D</string>
        <string>/Users/Test/C\ E</string>
        <string>/Users/Test/C\ F</string>
</array>
</plist>

在控制台日志中NSLog 将打印:

(
    "/Users/Test/C\\ D",
    "/Users/Test/C\\ E",
    "/Users/Test/C\\ F"
)

但调试器显示和函数使用的实际值将是:

(
/Users/Test/C\ D,
/Users/Test/C\ E,
/Users/Test/C\ F
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 2012-10-23
    • 2023-03-17
    • 2010-09-20
    • 1970-01-01
    • 2013-10-25
    • 2012-11-03
    相关资源
    最近更新 更多