Я пишу список свойств в списке ресурсов моего приложения. Объект NSString
в plist должен иметь в нем разрывы строк. Я пробовал \n
, но это не работает. Что мне делать, чтобы иметь новые строки в моей строке в plist?
Спасибо.
Я пишу список свойств в списке ресурсов моего приложения. Объект NSString
в plist должен иметь в нем разрывы строк. Я пробовал \n
, но это не работает. Что мне делать, чтобы иметь новые строки в моей строке в plist?
Спасибо.
Если вы редактируете plist в редакторе plc Xcode inbuild, вы можете нажать опцию-return, чтобы ввести разрыв строки в строковом значении.
Я нашел более простое решение:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
Кажется, читатель строк избегает всех символов, которые нужно экранировать, так что текст из plist отображается дословно. Этот код эффективно снижает дополнительный выход.
Отредактируйте свой plist, используя текстовый редактор вместо редактора plc Xcode. Затем вы просто прямо разделите строки на строки:
<string>foo
bar</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 в тексте, вам нужно изменить метод:) Вот как я загружаю свой plist в 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>
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 undescore" и заменяю его на "\ r", то есть возврат каретки для новой строки, и это помещается в конечную переменную.