50

アプリケーションのリソース バンドルに含まれるプロパティ リストを作成しています。plist 内のNSStringオブジェクトには改行が必要です。試し\nましたが、うまくいきません。plist の文字列に改行を含めるにはどうすればよいですか?

ありがとう。

4

5 に答える 5

117

Xcodeのinbuildplistエディターでplistを編集している場合は、option-returnを押して、文字列値内に改行を入力できます。

于 2010-02-24T15:51:07.927 に答える
37

私はより簡単な解決策を見つけました:

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

文字列リーダーは、plist からのテキストが逐語的にレンダリングされるように、エスケープする必要があるすべての文字をエスケープしているようです。このコードは、余分なエスケープを効果的に削除します。

于 2010-08-20T08:02:31.710 に答える
21

Xcode の plist エディターではなく、テキスト エディターを使用して plist を編集します。次に、改行を文字列に直接挿入します。

<string>foo
bar</string>
于 2010-01-10T00:43:25.533 に答える
4

少し遅れましたが、同じ問題を発見し、修正または回避策も発見しました。だから、これにつまずいた人は誰でも答えを得るでしょう:)

問題は、ファイルから文字列を読み取るときに、コンパイラが \n を 1 つとして認識する xcode とは異なり、\n が 2 文字になることです。

だから私はこのように 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 を書き込む必要がある場合は、メソッドを変更する必要があります :)

于 2010-06-24T13:04:05.880 に答える
0

これは、Swift 2.0 で plist をロードする方法です。

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>

スウィフト 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" に置き換えます。つまり、改行のキャリッジ リターンであり、これが最終変数に配置されます。

于 2016-01-15T13:30:41.577 に答える