アプリケーションのリソースバンドルに含めるプロパティリストを書いています。 plistのNSString
オブジェクトには、改行を含める必要があります。私は試した \n
、しかしそれはうまくいきません。 plistの文字列に改行を含めるにはどうすればよいですか?
ありがとう。
Xcode組み込みのplistエディターでplistを編集している場合は、option-returnキーを押して、文字列値内に改行を入力できます。
私はより簡単な解決策を見つけました:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
文字列リーダーは、plistからのテキストがそのまま表示されるように、エスケープする必要があるすべての文字をエスケープするようです。このコードは、余分なエスケープを効果的に削除します。
Xcodeのplistエディターの代わりにテキストエディターを使用してplistを編集します。次に、単に文字列に改行を直接入れます。
<string>foo
bar</string>
少し遅れましたが、同じ問題を発見し、修正または回避策も発見しました。だからこれにつまずく人のために答えを得るでしょう:)
そのため、問題はファイルから文字列を読み取る場合、コンパイラは\ 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書き込む必要がある場合は、メソッドを変更する必要があります:)
これは、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>
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"で置き換えます。つまり、改行のキャリッジリターンで、これが最後の変数に配置されます。