NSString:plist中的换行符

时间:2010-01-10 00:34:56

标签: iphone nsstring plist

我正在编写一个属性列表,位于我的应用程序的资源包中。 plist中的NSString对象需要在其中包含换行符。我试过\n,但这不起作用。如何在plist中的字符串中添加换行符?

感谢。

5 个答案:

答案 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”,即换行的回车符,并将其放入最终变量。