Swift UIKit中获取相似食谱API调用失败排查求助
排查步骤整理
一、先确认VC间传递的recipeID有效性
- 在
fetchSimilarRecipes函数第一行打印recipeID的具体值,确认和浏览器中能成功请求的ID完全一致,排除空值、无效ID的问题。 - 检查BookmarksVC到HomeVC的传值逻辑:
- 若用segue传值,确认
prepare(for:sender:)中正确给HomeVC的recipeID属性赋值,且sender参数没有传递错误。 - 若用通知/闭包传值,确认通知的监听、闭包的绑定都已正确设置,没有出现传值时机晚于API调用的情况。
- 若用segue传值,确认
二、检查NetworkManager的getSimilarRecipes方法实现与调用
- 核对方法调用的正确性:
- 确认方法名、参数名拼写完全匹配(比如参数是
recipeID还是id,大小写是否一致),没有因拼写错误导致方法未被触发。 - 若NetworkManager是单例模式,确认调用时使用的是单例实例(比如
NetworkManager.shared.getSimilarRecipes(...)),而非新建了未配置的实例。
- 确认方法名、参数名拼写完全匹配(比如参数是
- 检查URL拼接逻辑:
- 打印拼接后的完整URL,复制到浏览器测试,确认和手动请求的URL完全一致(包括
apiKey、number等必填参数),排除参数遗漏、路径拼写错误的问题。
- 打印拼接后的完整URL,复制到浏览器测试,确认和手动请求的URL完全一致(包括
- 检查请求是否真正发起:
- 确认
URLSessionDataTask创建后调用了resume()方法,这是网络请求发起的必要步骤,遗漏的话请求不会执行。
- 确认
三、排查网络请求的错误处理与细节
- 完善错误捕获逻辑:在
getSimilarRecipes方法的dataTask回调中,强制打印error信息,排查是否存在权限、网络连接、API限制(比如请求次数超限)等问题。 - 检查请求配置:
- 确认项目Info.plist中已配置网络权限(iOS 14+需添加
NSNetworkUsageDescription),且没有禁用蜂窝网络的配置。 - 若API要求特定请求头(比如
Accept: application/json),确认已添加到请求中。
- 确认项目Info.plist中已配置网络权限(iOS 14+需添加
- 验证响应处理:
- 在
dataTask回调中先打印data和response的内容,确认是否收到服务器响应,排除因解析逻辑错误导致误以为没拿到数据的情况。
- 在
四、排查线程与回调逻辑
- 确认
getSimilarRecipes的回调闭包是否被正确执行:可以在闭包开头添加打印语句,排查是否因闭包未触发导致后续逻辑没执行。 - 若回调中涉及UI更新,确认已切换到主线程执行(比如用
DispatchQueue.main.async包裹),避免因后台线程更新UI无反应而误判请求失败。
内容的提问来源于stack exchange,提问作者asduskun
相关产品推荐
相关产品推荐

