NSString:在plist中换行符
我正在写一个属性列表,在我的应用程序的资源包中。 plist中的NSString
对象需要在其中有换行符。 我试过\n
,但那不起作用。 如何在plist中的string中添加换行符?
谢谢。
如果您在Xcode的构buildplist编辑器中编辑plist,则可以按option-return在string值中input换行符。
我发现一个更简单的解决scheme:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
看起来,string阅读器逃离了所有需要被转义的字符,使得来自plist的文本逐字呈现。 这段代码有效地删除了额外的转义。
编辑您的plist使用文本编辑器,而不是Xcode的plist编辑器。 然后你直接在你的string中input换行符:
<string>foo bar</string>
有点晚,但我发现了同样的问题,我也发现了一个修复或解决方法。 所以任何人在这个绊倒会得到答案:)
所以问题是当你从一个文件中读取一个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:
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值存入xxRawvariables,然后search__“double undescore”,并将其replace为“\ r”,例如换行符的回车符,并将其放入最终variables中。