2010-01-10 10 views
44

में न्यूलाइन एस्केप मैं अपने आवेदन के संसाधन बंडल में होने के लिए एक संपत्ति सूची लिख रहा हूं। प्लस में NSString ऑब्जेक्ट में लाइन-ब्रेक होने की आवश्यकता है। मैंने \n की कोशिश की, लेकिन यह काम नहीं करता है। प्लिस्ट में मेरी स्ट्रिंग में न्यूलाइन रखने के लिए मैं क्या करूँ?एनएसएसटींग: प्लिस्ट

धन्यवाद।

उत्तर

97

आप Xcode के inbuild plist संपादक में plist संपादित किए जा रहे हैं, तो आप एक स्ट्रिंग मान के भीतर एक लाइन ब्रेक दर्ज करने का विकल्प-रिटर्न दबा सकते हैं।

+0

फाइल ब्रेक मैन्युअल रूप से काम कर सकते हैं यदि फ़ाइलें स्थिर हैं और कुछ हैं। लेकिन वास्तव में एक "सच" (कोड आधारित) समाधान नहीं है। केवल कोड आधारित समाधान मिहाई डेमियन और बसफिक्स के हैं। – Anshu

+0

+1 जिसने चाल की थी! धन्यवाद! – Jean

+0

यह आईआईएल 7 में यूआईएलएबल के साथ मेरे लिए ठीक काम करता है, हालांकि यह आईओएस 6 के साथ काम नहीं कर रहा है।मैं प्लिस्ट में 'विकल्प + रिटर्न' का उपयोग कर रहा हूं, लेकिन आईओएस 6 में मेरे यूलाबेल में लाइन ब्रेक नहीं है। क्या कोई और इस व्यवहार को देख रहा है? – njkremer

19

एक्सकोड के प्लेस्ट संपादक के बजाय टेक्स्ट एडिटर का उपयोग करके अपनी प्लेलिस्ट संपादित करें। तो फिर तुम बस सीधे अपने तार में पंक्ति विराम डाल:

<string>foo 
bar</string> 
+0

सुझाव के लिए धन्यवाद! –

+0

कभी-कभी सबसे सरल समाधान सर्वोत्तम होते हैं – MandisaW

4

थोड़ा देर हो चुकी है, लेकिन मुझे एक ही समस्या मिली और मैंने एक फिक्स या वर्कअराउंड भी खोजा। इसलिए इस पर ठोकर खाने वाले किसी भी व्यक्ति के लिए उत्तर मिलेगा :)

इसलिए समस्या तब होती है जब आप किसी फ़ाइल से स्ट्रिंग पढ़ते हैं, \ n xcode में विपरीत 2 वर्ण होंगे, संकलक \ n के रूप में पहचाना जाएगा।

"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 

का उपयोग कैसे करें

तो मैं इस तरह NSString वर्ग बढ़ाया यह:

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

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

इसकी त्वरित और गंदे, इस बात से अवगत रहें कि आपकी फ़ाइल में \\ n को \ n नहीं लिखा जाएगा, इसलिए यदि आपको पाठ पर \ n लिखना है तो आपको विधि को संशोधित करना होगा :)

+0

यह काम करता है; मुझे आश्चर्य है कि अगर कोई आसान समाधान नहीं है, हालांकि। –

+0

शानदार फिक्स। और दिलचस्प अवलोकन। मुझे प्रयास के दिन बचाया। यह अनिवार्य रूप से मिहाई डेमियन के समाधान के समान ही है लेकिन यह वास्तव में इसके पीछे कारण बताता है। – Anshu

34

मुझे एक आसान समाधान मिला:

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

यह स्ट्रिंग पाठक लगता निकल जाता है सभी पात्रों की जरूरत है कि इस तरह की है कि plist से पाठ को अक्षरशः प्रदान की गई है भाग निकले किया जाना है। यह कोड प्रभावी रूप से अतिरिक्त भागने को छोड़ देता है।

0

इस तरह मैं स्विफ्ट 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 में मिल परिवर्तनीय और फिर __ "डबल अंडरस्कोर" के लिए खोज करें और इसे "\ r" यानी कैरिज रिटर्न के साथ एक नई लाइन के लिए बदलें और इसे अंतिम चर में रखा गया है।