我正在編寫一個屬性列表,使其位於我的應用程序的資源包中。 plist中的NSString
對象需要在其中存在換行符。我試過\n
,但那不起作用。我該如何在plist的字符串中添加換行符?NSString:換行符中的換行符
謝謝。
我正在編寫一個屬性列表,使其位於我的應用程序的資源包中。 plist中的NSString
對象需要在其中存在換行符。我試過\n
,但那不起作用。我該如何在plist的字符串中添加換行符?NSString:換行符中的換行符
謝謝。
如果您正在編輯在Xcode的inbuild的plist編輯plist中,您可以按選項返回到輸入字符串值中的換行符。
使用文本編輯器而不是Xcode的plist編輯器編輯你的plist。然後你只需把換行符在你的字符串直接:
<string>foo
bar</string>
感謝您的建議! – 2010-01-14 02:26:07
有時最簡單的解決方案最好 – MandisaW 2017-03-17 16:08:05
有點晚,但我發現了同樣的問題,我也發現了一個修復或解決方法。 這樣的人誰在這個跌倒會得到一個答案:)
所以這個問題是當你從文件中讀取一個字符串,\ n將完全不同於2個字符在Xcode編譯器將\ n識別爲一個。
,所以我擴展了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-08-20 07:43:15
高超的修復。有趣的觀察。爲我節省了數日的努力。它與Mihai Damian的解決方案基本相同,但這真的解釋了它背後的原因。 – Anshu 2012-02-24 10:17:18
我發現了一個更簡單的解決方案:
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
看來串逃脫讀者需要的所有字符轉義,使得從plist中的文本逐字渲染。此代碼有效地降低了額外的轉義。
這是我做的如何加載我的plist在雨燕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>
雨燕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」代替,例如回車換行,並將其放入最終變量中。
手動添加換行符可能會在文件靜態且很少的情況下起作用。但不是真正的「基於代碼」的解決方案。唯一的基於代碼的解決方案是來自Mihai Damian和justAfix的解決方案。 – Anshu 2012-02-24 10:25:17
+1了!謝謝! – Jean 2012-07-27 15:44:22
這似乎在UILabel的iOS 7中工作得很好,但是它似乎不適用於iOS 6。我在plist中使用'option + return',但是我的UILabel在iOS 6中沒有換行符。有沒有人看到這種行爲? – njkremer 2013-12-09 22:23:01