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

iOS 18下发送网络请求时APP崩溃问题求助

iOS 18 网络请求崩溃问题解决

问题概述

APP在iOS 18系统下发送网络请求时触发崩溃,该请求此前可在iOS 18环境正常运行。

崩溃代码

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024
                                                     diskCapacity:100 * 1024 * 1024
                                                        diskPath:@"myCache"];
if (!configuration) {
    NSLog(@"Failed to create session configuration.");
    return;
}


NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
if (!session) {
    NSLog(@"Failed to create session.");
    return;
}


NSURL *url = [NSURL URLWithString:@"https://example.com"];
if (!url) {
    NSLog(@"Invalid URL.");
    return;
}

NSURLRequest *request = [NSURLRequest requestWithURL:url];
if (!request) {
    NSLog(@"Failed to create request.");
    return;
}

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error.localizedDescription);
    } else {
        NSLog(@"Data received: %@", data);
    }
}];

if (!dataTask) {
    NSLog(@"Failed to create data task.");
   return;
}

dataTask.priority = NSURLSessionTaskPriorityDefault;  


[dataTask resume];

错误日志

因未捕获异常'NSInvalidArgumentException'导致APP终止,原因:'*** -[NSFileManager createDirectoryAtURL:withIntermediateDirectories:attributes:error:]: URL 为 nil'
*** 首次抛出调用栈:
(0x1848bd08c 0x181bbf2e4 0x183585f48 0x185d2f2bc 0x185d2ec7c 0x10709271c 0x1070a3f04 0x185d2ea88 0x185d2db20 0x185d2d5f4 0x185d2d07c 0x185d274b0 0x185dd82c4 0x185dd8214 0x185dd730c 0x107090a30 0x10709271c 0x10709a5e8 0x10709b394 0x10709cb20 0x1070a85f0 0x1070a7c00 0x20bc27c7c 0x20bc24488)
libc++abi: 因未捕获NSException类型异常而终止

原因分析

崩溃根源在于初始化NSURLCache时传入的diskPath:@"myCache"参数。iOS 18对NSURLCache的磁盘路径处理逻辑做了变更,直接传入相对路径会导致系统无法正确生成缓存目录的URL,最终调用NSFileManager创建目录时因URL为nil触发非法参数异常。

解决方案

方案1:使用系统默认缓存目录

如果不需要自定义缓存目录路径,直接省略diskPath参数,让系统自动处理缓存目录:

configuration.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024
                                                     diskCapacity:100 * 1024 * 1024
                                                        diskPath:nil];

方案2:指定自定义绝对缓存路径

若需自定义缓存目录,先获取应用的缓存目录绝对URL,再拼接自定义路径:

// 获取应用缓存目录
NSURL *cacheDirURL = [[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory
                                                           inDomain:NSUserDomainMask
                                                  appropriateForURL:nil
                                                             create:YES
                                                              error:nil];
// 拼接自定义缓存路径
NSURL *customCacheURL = [cacheDirURL URLByAppendingPathComponent:@"myCache"];

// 使用绝对路径初始化NSURLCache
configuration.URLCache = [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024
                                                     diskCapacity:100 * 1024 * 1024
                                                        diskPath:customCacheURL.path];

内容的提问来源于stack exchange,提问作者J.zone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:43:13