50 votes

NSString: nouvelle ligne d'échappement dans le plist

J'écris une liste de propriétés pour faire partie du groupe de ressources de mon application. Un objet NSString dans le plist doit comporter des sauts de ligne. J'ai essayé \n , mais ça ne marche pas. Que dois-je faire pour avoir des nouvelles lignes dans ma chaîne dans le plist?

Merci.

112voto

Dave Addey Points 586

Si vous modifiez le plist dans l'éditeur de plist inbuild de Xcode, vous pouvez appuyer sur option-return pour entrer un saut de ligne dans une valeur de chaîne.

36voto

Mihai Damian Points 3714

J'ai trouvé une solution plus simple:

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

Il semble que le lecteur de chaîne échappe à tous les caractères qui doivent être échappés, de sorte que le texte du plist soit rendu intégralement. Ce code supprime efficacement l'évasion supplémentaire.

21voto

Jon Reid Points 9726

Modifiez votre plist en utilisant un éditeur de texte au lieu de l'éditeur de plist de Xcode. Ensuite, vous mettez simplement des sauts de ligne dans vos chaînes directement:

 <string>foo
bar</string>
 

4voto

justAfix Points 41

un peu en retard, mais j'ai découvert le même problème et j'ai aussi découvert un correctif ou une solution de contournement. donc, pour toute personne qui trébuche sur cette obtiendrez une réponse :)

donc, le problème, c'est quand vous lisez une chaîne de caractères à partir d'un fichier \n sera de 2 caractères à la différence dans xcode, le compilateur reconnaît \n comme un.

j'ai donc étendu la classe NSString comme ceci:

"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

Comment l'utiliser:

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

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

son rapide et sale, sachez que \\n dans votre fichier ne sera pas reconnaître que \n donc, si vous avez besoin d'écrire \n sur le texte que vous avez à modifier la méthode :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X