50

我正在编写一个属性列表以位于我的应用程序的资源包中。plist 中的NSString对象需要有换行符。我试过\n了,但这不起作用。我该怎么做才能在 plist 中的字符串中有换行符?

谢谢。

4

5 回答 5

117

如果您在 Xcode 的内置 plist 编辑器中编辑 plist,您可以按 option-return 在字符串值中输入换行符。

于 2010-02-24T15:51:07.927 回答
37

我找到了一个更简单的解决方案:

NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];

似乎字符串阅读器转义了所有需要转义的字符,以便逐字呈现 plist 中的文本。此代码有效地删除了额外的转义。

于 2010-08-20T08:02:31.710 回答
21

使用文本编辑器而不是 Xcode 的 plist 编辑器来编辑您的 plist。然后,您只需直接在字符串中放置换行符:

<string>foo
bar</string>
于 2010-01-10T00:43:25.533 回答
4

有点晚了,但我发现了同样的问题,我还发现了一个修复或解决方法。因此,任何偶然发现此问题的人都会得到答案:)

所以问题是当你从文件中读取一个字符串时,\n 将是 2 个字符,不像在 xcode 中编译器会将 \n 识别为一个。

所以我像这样扩展了 NSString 类:

“NSString+newLineToString.h”:

@interface NSString(newLineToString)    
-(NSString*)newLineToString;   
@end

“NSString+newLineToString.m”:

#import "NSString+newLineToString.h"

@implementation NSString(newLineToString)

-(NSString*)newLineToString
{
    NSString *string = @"";
    NSArray *chunks = [self componentsSeparatedByString: @"\\n"];

    for(id str in chunks){
        if([string isEqualToString:@""]){
            string = [NSString stringWithFormat:@"%@",str];
        }else{
            string = [NSString stringWithFormat:@"%@\n%@",string,str];
        }

    }
    return string;
} 
@end

如何使用它:

rootDict = [[NSDictionary alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"]];

NSString *string = [[rootDict objectForKey:@"myString"] newLineToString];

它又快又脏,请注意文件中的 \\n 不会被识别为 \n 所以如果你需要在文本上写 \n 你必须修改方法:)

于 2010-06-24T13:04:05.880 回答
0

这就是我在 Swift 2.0 中加载 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">
<dict>
    <key>STRING_TEXT</key>
    <string>This string contains an emoji and a double underscore!__The double undescore is converted when the plist item is read.</string>
</dict>
</plist>

斯威夫特 2.0:

import Foundation

var stringTextRaw = plistValueForString(keyname:"STRING_TEXT")
var stringText = stringTextRaw.stringByReplacingOccurrencesOfString("__", withString: "\r")



func plistValueForString(keyname keyname:String) -> String {

  let filePath = NSBundle.mainBundle().pathForResource("StringsToUse", ofType:"plist")
  let plist = NSDictionary(contentsOfFile:filePath!)

  let value:String = plist?.objectForKey(keyname) as! String
  return value
}

所以我首先将存储的 plist 值放入 xxRaw 变量中,然后搜索 __"double undescore" 并将其替换为 "\r" 即回车换行,并将其放入最终变量中。

于 2016-01-15T13:30:41.577 回答