2014-09-24 15 views
6

मैं बहुत की तरह अंत में जोड़ा चर के साथ एक यूआरएल स्ट्रिंग है,:स्विफ्ट यूआरएल स्ट्रिंग एन्कोडिंग आईओएस पर क्रैशिंग?

.../create?title=My Apartment 

मैं (अंतरिक्ष) की तरह किसी भी गैर मान्य वर्ण से बचने के लिए चाहते हैं, लेकिन जब मैं ऐसा करने के लिए प्रयास करते हैं, मैं दुर्घटना दोनों सिम्युलेटर और अपने डिवाइस पर (आईओएस 8.0) का उपयोग करें:

2014-09-24 16:59:19.120 MyApp[16406:171349] Item1: MyApp.PostItem 
2014-09-24 16:59:19.121 MyApp[16406:171349] Item2: My Apartment 
2014-09-24 16:59:19.125 MyApp[16406:171349] Scrubbed: My    0X0P+0partment 
:

NSLog("Item1: \(item)") 
NSLog("Item2: \(item.title)") 

if let scrubbed = item.title.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet()) { 
    NSLog("Scrubbed: \(scrubbed)") 
} else { 
    NSLog("Nope!") 
} 

क्या मैं सिम्युलेटर पर देखो, यह है

उस स्क्रब किए गए स्ट्रिंग की अजीबता पर ध्यान दें। यह कुछ समय बाद खराब तरीके से निर्मित NSURL ऑब्जेक्ट के बारे में शिकायत करता है, जो आश्चर्यजनक रूप से।

जब मैं अपने डिवाइस पर इस चलाने के लिए, मैं NSLog() बयान पर एक EXC_BAD_ACCESS कि Scrubbed:

2014-09-24 17:04:37.378 MyApp[4346:2048259] Item1: MyApp.PostItem 
2014-09-24 17:04:37.379 MyApp[4346:2048259] Item2: My Apartment 

(lldb) po scrubbed 

error: <EXPR>:1:1: error: non-nominal type '$__lldb_context' cannot be extended 
extension $__lldb_context {        
^ 
<EXPR>:11:5: error: 'PostManager.Type' does not have a member named '$__lldb_wrapped_expr_3' 
    $__lldb_injected_self.$__lldb_wrapped_expr_3(  
    ^     ~~~~~~~~~~~~~~~~~~~~~~ 
(lldb) 

मुद्रित करने के लिए मैं कैसे पता लगा सकते हैं यहाँ क्या हो रहा है कोशिश कर रहा है के साथ दुर्घटना? मुझे इस तरह दुर्घटनाग्रस्त होने से पहले कंसोल में मुद्रित Nope! देखने की उम्मीद होगी। मॉडल ऑब्जेक्ट में String मान UITextField द्वारा प्रदान किया जा रहा है।

संपादित करें:

NSLog("Data: \(item.title.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false))") 
... 
2014-09-24 17:18:43.620 MyApp[4367:2051348] Data: Optional(<4d792041 70617274 6d656e74>) 

संपादित करें 2: मैं पूर्व झाड़ी मूल्य से कुछ NSData उत्पादन प्राप्त करने में सक्षम था मैं इस दुर्घटनाओं Xcode में पुष्टि कर सकते हैं, और गुजरता एक खेल के मैदान में। एक बग लगता है - लेकिन कहाँ? Xcode? संकलक? रनटाइम?

संपादित करें 3: यह बग केवल तभी बढ़ता है जब मैं NSLog() के साथ परिवर्तनीय मान मुद्रित करने का प्रयास करता हूं। अगर मैं इसे पूरी तरह से करने से बचता हूं, और केवल वैरिएबल का उपयोग करें, तो सभी खुश हैं।

उत्तर

5

NSCharacterSet.URLHostAllowedCharacterSet() से बचने जैसा लगता है कि अजीब यूनिकोड स्ट्रिंग उत्पन्न करता है जो इस स्ट्रिंग को पहले पैरामीटर के रूप में उपयोग करने में NSLog में क्रैश को मजबूर करता है।

इस से बचने के लिए कुछ तरीके हैं और आप निश्चित रूप से उन्हें उपयोग करना चाहिए:

  • जहां तक ​​आप उपयोग कर रहे इस URL क्वेरी में आप निश्चित रूप से अलग characher सेट का उपयोग करना चाहिए - NSCharacterSet.URLQueryAllowedCharacterSet()

  • उपयोग print/println

  • NSLog के पास scrubbed एक पैरामीटर NSLog("Scrubbed: %@", scrubbed)

उन "समाधान" के

किसी भी रूप में समस्या का हल।

+2

'एनएसएलओजी ("% @ ", यूआरएल) 'पूरी तरह से मेरे लिए काम किया। धन्यवाद! –

संबंधित मुद्दे