我正在编写一个属性列表,位于我的应用程序的资源包中。 plist中的NSString
对象需要在其中包含换行符。我试过\n
,但这不起作用。如何在plist中的字符串中添加换行符?
感谢。
答案 0 :(得分:108)
如果您在Xcode的内置plist编辑器中编辑plist,可以按option-return在字符串值中输入换行符。
答案 1 :(得分:35)
我找到了一个更简单的解决方案:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
字符串阅读器似乎逃脱了所有需要转义的字符,以便逐字渲染plist中的文本。这段代码有效地减少了额外的逃避。
答案 2 :(得分:21)
使用文本编辑器而不是Xcode的plist编辑器编辑plist。然后,您只需在字符串中直接添加换行符:
<string>foo
bar</string>
答案 3 :(得分: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,则必须修改方法:)
答案 4 :(得分:0)
这是我在Swift 2.0中加载我的plist的方法:
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>
Swift 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 unexcore”并将其替换为“\ r”,即换行的回车符,并将其放入最终变量。