【问题标题】:AFNetworking - Invalid parameter not satisfying: urlAFNetworking - 无效参数不满足:url
【发布时间】:2013-09-20 21:31:22
【问题描述】:

我刚刚在 ios7 上尝试了 AFNetworking,但出现此错误:

    /Classes/AFHTTPClient.m:227
 2013-09-16 18:25:57.557 App[13531:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: url

我不知道发生了什么,lib 和 ios7 有问题吗? 谢谢。

【问题讨论】:

  • 我现在也在努力解决这个问题。您找到解决方案了吗?
  • 我评论了第 227 行: // NSParameterAssert(url);它有效..
  • 如果您包含程序出错的代码会有所帮助。但是,您应该检查是否在 URL 参数中传递了 nil,例如:[[AFHTTPClient alloc] initWithBaseURL:nil]。 NSParameterAssert(url) 在那里防止使用 nil URL 初始化 HTTP 客户端。
  • @JamieForrest:最终我发现 Settings.bundle 中的预定义设置没有被正确读取,这就是为什么我的 url 根本没有填写。我认为这是因为我定义了一个默认值,但遗憾的是它不起作用。只需创建一个断点并在那里打印您的 URL 的值。
  • @arlg:这是一个非常愚蠢的解决方案。 NSParameterAssert 唯一要做的就是检查参数是否实际正确设置。所以我强烈反对这种解决方案!

标签: ios afnetworking


【解决方案1】:

正如 Leon 在评论中所说,注释掉 NSParameterAssert 并不是一个理想的解决方案。 AFNetworking 的作者出于某种原因提出了一个断言。没有通过断言的代码很可能是由无效的 URL 引起的。

请记住,NSURL 工厂方法(即 + URLWithString: 及其同级)在传递无效 URL 字符串时将返回 nil。在这种情况下,无效字符串是包含无效 URL 的字符串。

您应该做的而不是评论我们的断言,而是确保您没有将任何无效的 URL 传递给您的 AFHTTPClient 实例。 This Stackoverflow answers 提供了一个如何验证 URL 的示例。这是答案中的一个示例:

- (BOOL)validateUrl:(NSString *)candidate {
    NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:candidate];
}

或者,您可以使用NSStringstringByAddingPercentEscapesUsingEncoding 方法添加百分比转义。像这样:

NSString *encoded = [notEncoded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

【讨论】:

  • 我知道这不是一个理想的解决方案,但我需要快速修复。我现在无法尝试您的答案,因为我不再从事该项目。无论如何,感谢您的回答,当我再次从事该项目时,我会尝试它:)。
  • 很高兴我能帮上忙 :-)
  • 就我而言,事实证明我无意中在 url 字符串的开头添加了空格。所以,是的,这主要是关于错误的网址。
【解决方案2】:

我刚刚遇到这个错误,原因是网址开头有一个空格:

 http://host.com/etc
^

【讨论】:

    【解决方案3】:

    我今天遇到了一个关于这个断言的奇怪案例。我的问题是我从其他文本编辑器(Sublime)复制了 url,这就是 url 无效的原因。

    直到我测试了几次我才相信。

    【讨论】:

      【解决方案4】:

      希望它的工作..在 AFnetworking 类名 AFURLRequestSerialization.m

      commented the line 227 : // NSParameterAssert(url);
      

      【讨论】:

        【解决方案5】:

        正如 Kasper 所说 --> “您可以使用 NSString 的 stringByAddingPercentEscapesUsingEncoding 方法添加百分比转义”

        或更好地使用以下内容,因为它在 ios 9 中已弃用

        path = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-14
          • 2021-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-28
          • 1970-01-01
          相关资源
          最近更新 更多