代码之家  ›  专栏  ›  技术社区  ›  Jonathan Sterling

nsstring:plist中的换行符

  •  48
  • Jonathan Sterling  · 技术社区  · 15 年前

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

    谢谢。

    5 回复  |  直到 7 年前
        1
  •  106
  •   Dave Addey    15 年前

    如果在Xcode的inbuild plist编辑器中编辑plist,可以按Option Return在字符串值中输入换行符。

        2
  •  35
  •   Mihai Damian    14 年前

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

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

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

        3
  •  20
  •   Jon Reid    15 年前

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

    <string>foo
    bar</string>
    
        4
  •  4
  •   justAfix    15 年前

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

    所以问题是当您从一个文件中读取一个字符串时,它将是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,则必须修改方法:)

        5
  •  0
  •   sakumatto    9 年前

    这就是我如何在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:

    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”ie carriage return,然后将其放入最终变量中。