NSString: Escape новой строки в plist

Я пишу список свойств, чтобы быть в пакете ресурсов моего приложения. NSString объект в plist должен иметь разрывы строки в нем. Я попробовал \n, но это не работает. Что я делаю, чтобы иметь новые строки в моей строке в plist?

Спасибо.

50
задан Jonathan Sterling 9 January 2010 в 14:34
поделиться

4 ответа

Если вы редактируете список во встроенном редакторе списков Xcode, вы можете нажать option-return, чтобы ввести разрыв строки в строковое значение.

112
ответ дан 7 November 2019 в 10:29
поделиться

Отредактируйте свой Plist с помощью текстового редактора вместо редактора XCode Plist. Тогда вы просто положите линии ломаю в свои строки напрямую:

<string>foo
bar</string>
21
ответ дан 7 November 2019 в 10:29
поделиться

немного поздно, но я обнаружил ту же проблему, и я также обнаружил исправление или обходной путь. Так что любой, кто наткнется на это, получит ответ :)

Итак, проблема в том, что когда вы читаете строку из файла, \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
ответ дан 7 November 2019 в 10:29
поделиться

Я нашел более простое решение:

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

Похоже, что программа чтения строк экранирует все символы, которые должны быть экранированы, чтобы текст из plist был отображен дословно. Этот код эффективно избавляет от лишнего экранирования.

36
ответ дан 7 November 2019 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: