Domanda

sto scrivendo un elenco di proprietà di essere nel pacchetto delle risorse della mia candidatura. Un oggetto NSString nel plist deve avere interruzioni di linea in esso. Ho provato \n, ma che non funziona. Che cosa devo fare per avere a capo nella mia stringa nel plist?

Grazie.

È stato utile?

Soluzione

Se si sta modificando il plist in inbuild editor di plist di Xcode, è possibile premere l'opzione-ritorno per inserire un'interruzione di linea all'interno di un valore stringa.

Altri suggerimenti

Ho trovato una soluzione più semplice:

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

Sembra che il lettore di stringa sfugge tutti i caratteri che devono essere sfuggiti in modo tale che il testo dal plist è reso testualmente. Questo codice scende in modo efficace la fuga in più.

Modifica il plist utilizzando un editor di testo invece di editor di plist di Xcode. Quindi è sufficiente inserire interruzioni di riga nelle stringhe direttamente:

<string>foo
bar</string>

un po 'tardi, ma ho scoperto lo stesso problema e ho anche scoperto una correzione o una soluzione alternativa. quindi per tutti coloro che inciampa su questo otterrà una risposta:)

in modo che il problema è quando si legge una stringa da un file, \ n sarà di 2 caratteri a differenza Xcode il compilatore riconoscerà \ n come uno.

così ho esteso la classe NSString in questo modo:

"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

Come si usa:

rootDict = [[NSDictionary alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"]];

NSString *string = [[rootDict objectForKey:@"myString"] newLineToString];

il suo rapido e sporco, essere consapevoli che \\ n nel file non sarà riconosciuto come \ n quindi se avete bisogno di scrivere \ n il testo è necessario modificare il metodo:)

Questo è come faccio a caricare il mio plist in 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
}

Così ho capito il valore plist memorizzato nella variabile xxRaw e quindi cercare __ "doppio undescore" e sostituire che con "\ r", cioè il trasporto di ritorno per un ritorno a capo e questo è posto nella variabile finale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top