【问题标题】:NSURL nil because of spacesNSURL nil 因为空格
【发布时间】:2016-07-31 19:10:40
【问题描述】:

端点不关心 URL 中是否有空格,但 NSURL 似乎有。

我每次都得到nilNSURL *url = [NSURL URLWithString:string];

NSString *string = [NSString stringWithFormat:@"http://endpoint.com/search?one=%@&two=%@", textField1.text, textField2.text];
NSURL *url = [NSURL URLWithString:string];
NSString *urlAbsolute = [url absoluteString];
[theManager GET:urlAbsolute parameters:nil progress:nil success:^(NSURLSessionTask * _Nonnull task, id  _Nullable responseObject) {

我想将空格传递到端点,因为我想从端点中取出空格。 (即传入“星球大战”,所以如果我从字符串中删除空格,我会得到“星球大战”而不是“星球大战”)。

有什么想法吗?

【问题讨论】:

  • NSString stringByAddingPercentEncodingWithAllowedCharacters:做一些研究。
  • @rmaddy 我已经试过了,打算把它放在笔记中,但似乎无法让它工作,即使我认为它可能是我正在寻找的。我尝试了stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],但无法正常工作,我不知道为什么?
  • 您应该尝试使用该方法来更新您的问题。
  • 顺便说一句 - urlurlAbsolute 有什么意义?为什么不直接使用string

标签: ios objective-c nsstring nsurl


【解决方案1】:

试试这个代码:

NSString *firstArgument = [self.textField1.text stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSString *secondArgument = [self.textField2.text stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];

NSString *string = [NSString stringWithFormat:@"http://endpoint.com/search?one=%@&two=%@", firstArgument, secondArgument];
NSURL *url = [NSURL URLWithString:string];
NSString *urlAbsolute = [url absoluteString];

【讨论】:

  • 有人能解释一下为什么这个答案被否决了吗?
  • 因为这个答案不是应该的。此代码首先不必要地替换了两位文本中的空格。应该转义的所有其他可能的字符呢?然后它在整个 URL 上不正确地使用了stringByAddingPercentEncodingWithAllowedCharacters
  • @rmaddy 关于stringByAddingPercentEncodingWithAllowedCharacters 的不当使用,你完全正确——这是我的复制粘贴错误。我编辑了我的答案,我认为正确的知道应该没问题。感谢您的警惕
【解决方案2】:

使用允许字符的字符串编码 请找到以下代码。

NSString *string = [NSString stringWithFormat:@"http://endpoint.com/search?one=%@&two=%@", textField1.text, textField2.text];
NSURL *url = [NSURL URLWithString:[string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]];

【讨论】:

  • 不要将stringByAddingPercentEncodingWithAllowedCharacters 应用于整个 URL,只应用于需要它的部分(来自两个文本字段的两个值)。
  • @rmaddy 提示是关键,我只见过在我的研究中对整个 URL 进行编码。大大的帮助!
猜你喜欢
  • 2014-04-28
  • 1970-01-01
  • 2011-04-24
  • 2014-10-11
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多