Cra*_*tis 6 url-encoding ios swift
我有一个URL字符串,其末尾附加了变量,如下所示:
.../create?title=My Apartment
Run Code Online (Sandbox Code Playgroud)
我想逃避任何无效的字符(如空格),但是当我尝试这样做时,我使用以下方法在模拟器和我的设备(iOS 8.0)上崩溃:
NSLog("Item1: \(item)")
NSLog("Item2: \(item.title)")
if let scrubbed = item.title.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet()) {
NSLog("Scrubbed: \(scrubbed)")
} else {
NSLog("Nope!")
}
Run Code Online (Sandbox Code Playgroud)
我在模拟器上看到的是:
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
Run Code Online (Sandbox Code Playgroud)
注意那个擦洗字符串的奇怪之处.一段时间后,它崩溃抱怨一个构造不良的NSURL物体,毫不奇怪.
当我在我的设备上运行它时,我EXC_BAD_ACCESS在NSLog()试图打印的声明中崩溃了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)
Run Code Online (Sandbox Code Playgroud)
我怎么能弄清楚这里发生了什么?我本来希望Nope!在它崩溃之前看到在控制台中打印出来.String模型对象中的值由a提供UITextField.
编辑:我能够NSData从预先擦除的值中获得一些输出:
NSLog("Data: \(item.title.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false))")
...
2014-09-24 17:18:43.620 MyApp[4367:2051348] Data: Optional(<4d792041 70617274 6d656e74>)
Run Code Online (Sandbox Code Playgroud)
编辑2:我可以在Xcode中确认此崩溃,并在操场上通过.似乎是一个错误 - 但在哪里?Xcode的?编译器?运行?
编辑3:如果我尝试打印出变量值,则只会出现此错误NSLog().如果我完全避免这样做,只使用变量,每个人都很高兴.
看起来像转义NSCharacterSet.URLHostAllowedCharacterSet()生成奇怪的unicode字符串,在使用此字符串作为第一个参数的情况下强制在NSLog中崩溃.
有几种方法可以避免这种情况,你肯定应该使用它们:
至于你在URL查询中使用它,你肯定应该使用不同的characher集 - NSCharacterSet.URLQueryAllowedCharacterSet().
使用 print/println
传递scrubbed给NSLog参数NSLog("Scrubbed: %@", scrubbed)
任何这些"解决方法"都可以解决问题.
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |