我正在编写一个属性列表以位于我的应用程序的资源包中。plist 中的NSString
对象需要有换行符。我试过\n
了,但这不起作用。我该怎么做才能在 plist 中的字符串中有换行符?
谢谢。
如果您在 Xcode 的内置 plist 编辑器中编辑 plist,您可以按 option-return 在字符串值中输入换行符。
我找到了一个更简单的解决方案:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
似乎字符串阅读器转义了所有需要转义的字符,以便逐字呈现 plist 中的文本。此代码有效地删除了额外的转义。
使用文本编辑器而不是 Xcode 的 plist 编辑器来编辑您的 plist。然后,您只需直接在字符串中放置换行符:
<string>foo
bar</string>
有点晚了,但我发现了同样的问题,我还发现了一个修复或解决方法。因此,任何偶然发现此问题的人都会得到答案:)
所以问题是当你从文件中读取一个字符串时,\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 你必须修改方法:)
这就是我在 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" 即回车换行,并将其放入最终变量中。