iphone - NSString: escape de nueva línea en plist
(5)
Así es como cargo mi plist en 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
}
Así que primero obtengo el valor plist almacenado en la variable xxRaw y luego busco __ "double undescore" y lo reemplazo con "/ r", es decir, retorno de carro para una nueva línea y esto se coloca en la variable final.
Estoy escribiendo una lista de propiedades para estar en el paquete de recursos de mi aplicación. Un objeto NSString
en el plist necesita tener saltos de línea. Lo intenté /n
, pero eso no funciona. ¿Qué debo hacer para tener nuevas líneas en mi cadena en el plist?
Gracias.
Edite su plist usando un editor de texto en lugar del editor plstico de Xcode. Entonces simplemente pones saltos de línea en tus cadenas directamente:
<string>foo
bar</string>
Encontré una solución más simple:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"//n" withString:@"/n"];
Parece que el lector de cadenas escapa a todos los caracteres que necesitan ser escapados de manera que el texto de la lista se representa textualmente. Este código efectivamente elimina el escape extra.
Si está editando el plist en el editor de pliegos de construcción de Xcode, puede presionar option-return para ingresar un salto de línea dentro de un valor de cadena.
un poco tarde, pero descubrí el mismo problema y también descubrí una solución o una solución alternativa. así que para cualquiera que tropiece con esto obtendrá una respuesta :)
entonces el problema es que cuando lee una cadena de un archivo, / n será de 2 caracteres a diferencia de xcode que el compilador reconocerá / n como uno.
así que extendí la clase NSString de esta manera:
"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
Cómo usarlo:
rootDict = [[NSDictionary alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"]];
NSString *string = [[rootDict objectForKey:@"myString"] newLineToString];
es rápido y sucio, tenga en cuenta que // n en su archivo no se reconocerá como / n así que si necesita escribir / n en el texto, debe modificar el método :)