You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 11中Base64转图片触发NSURLConnection错误码-1022求助

解决NSURLConnection Error Code -1022(Base64转图片场景)

我之前也碰到过一模一样的问题,在iOS 11/Xcode 9环境下明明全局配置了ATS的NSAllowsArbitraryLoads,其他网络请求都正常,唯独转Base64图片时弹出-1022错误。先给你拆解问题核心,再给你直接能用的解决方案:

首先,错误码**-1022**对应的是NSURLErrorAppTransportSecurityRequiresSecureConnection,也就是ATS强制要求请求使用HTTPS安全连接。但你已经开了全局任意加载,说明问题根本不在常规网络请求上——你大概率用错了Base64转图片的方式。

很多开发者会误以为要把Base64包装成URL,再通过NSURLConnection去加载,但这完全是多此一举,反而会触发ATS的无意义检查(哪怕是本地的data URL,在iOS 11的特定场景下也可能被ATS拦截)。

正确的Base64转图片流程

直接将Base64字符串解码成NSData,再用UIImage初始化即可,不需要走任何网络请求:

Objective-C 示例

- (UIImage *)imageFromBase64String:(NSString *)base64String {
    // 移除Base64字符串可能带的前缀(比如"data:image/png;base64,")
    NSString *cleanedBase64 = [[base64String componentsSeparatedByString:@","] lastObject];
    NSData *imageData = [[NSData alloc] initWithBase64EncodedString:cleanedBase64 
                                                          options:NSDataBase64DecodingIgnoreUnknownCharacters];
    return [UIImage imageWithData:imageData];
}

Swift 示例

func image(from base64String: String) -> UIImage? {
    // 处理可能的前缀
    let cleanedString = base64String.components(separatedBy: ",").last ?? base64String
    guard let imageData = Data(base64Encoded: cleanedString) else {
        return nil
    }
    return UIImage(data: imageData)
}

为什么之前的方式会出错?

如果你的代码里是把Base64拼接成data:image/png;base64,xxxx这类URL,再用NSURLConnection发起请求,iOS 11的ATS机制可能会对这个URL的“安全性”产生误判,哪怕它是本地的data scheme URL。直接解析Data生成图片才是最直接、最高效且不会触发ATS问题的方式。

额外检查点

  • 确认Base64字符串没有格式错误(比如多余的空格、换行符),可以用NSDataBase64DecodingIgnoreUnknownCharacters选项忽略无关字符
  • 如果真的有特殊场景必须用URL加载,可以在ATS配置里针对data scheme添加例外,但完全没必要——直接解析Data的方案更简洁

内容的提问来源于stack exchange,提问作者Benjamin RD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:09:35