Swift 2.1 do-try-catch 未捕获错误

2024-04-25

这是我的 Swift 2.1 代码片段。发生的错误显示在错误出现处的注释中。

错误显示在调试面板中,并且应用程序崩溃。该应用程序永远不会打印 catch 中的行,也不会按预期优雅地返回。

let audioFileURL = receivedAudio.filePathURL

guard let audioFile = try? AVAudioFile(forReading: audioFileURL) else {
    print("file setup failed")
    return
}

let audioFileFrameCount = AVAudioFrameCount(audioFile.length)

audioFileBuffer = AVAudioPCMBuffer(PCMFormat: audioFile.fileFormat, frameCapacity: audioFileFrameCount)

do {
    // ERROR: AVAudioFile.mm:263: -[AVAudioFile readIntoBuffer:frameCount:error:]: error -50
    // Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'error -50'
    // -50 = Core Audio: bad param
    try audioFile.readIntoBuffer(audioFileBuffer)
}
catch {
    print("unable to load sound file into buffer")
    return
}

从我所看到的一切来看,我的 do/try/catch 格式应该是正确的。

audioFile.readIntoBuffer回报void并且有关键字throws.

然而,catch 永远不会被执行。

我缺少什么?

UPDATE: 来自Apple关于AVAudioFile的文档 https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioFile_Class/index.html#//apple_ref/occ/instm/AVAudioFile/initForReading:error:

For:

func readIntoBuffer(_ buffer: AVAudioPCMBuffer) throws

Under 讨论:

处理 Swift 中的错误:

在 Swift 中,此 API 作为初始值设定项导入,并使用 throws 关键字进行标记,以指示在失败时抛出错误。

您可以在 try 表达式中调用此方法,并处理 do 语句的 catch 子句中的任何错误,如《Swift 编程语言 (Swift 2.1)》中的错误处理和《将 Swift 与 Cocoa 和 Objective-C 一起使用》中的错误处理 (Swift 2.1) 中所述。 )。

From Swift 编程语言 (Swift 2.1):错误处理 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html

NOTE

Swift 中的错误处理类似于其他语言中的异常处理,使用 try、catch 和 throw 关键字。与许多语言(包括 Objective-C)中的异常处理不同,Swift 中的错误处理不涉及展开调用堆栈,这一过程的计算成本可能很高。因此, throw 语句的性能特征与 return 语句的性能特征相当。

最后,来自同一份文档:

使用 Do-Catch 处理错误

您可以使用 do-catch 语句通过运行代码块来处理错误。如果 do 子句中的代码抛出错误,则会将其与 catch 子句进行匹配,以确定哪一个子句可以处理该错误。

我不必编写并抛出自己的错误/异常来捕获它们。我也应该能够捕获 Swift 的异常。


The do - catch组合很好。这个问题根本无法被捕获 - 因此永远不会出现在catch block.

如果问题是可捕获的(通过 Swift 定义和处理)throws功能),catch块将被执行。


一些语义:关于术语之间的差异存在长期争论error and 例外.

一些开发人员认为这两个术语是不同的。在这种情况下,术语error代表一个旨在处理的问题。斯威夫特的throws行动适合这里。在这种情况下,一个do - catch结合起来就能发现问题。

An 例外对于这些开发人员来说,代表一个意外的、通常是致命的、无法捕获和处理的问题。 (一般情况下,即使你能抓住它,你也应付不了。)

其他人则认为这两个术语是等效的并且可以互换,无论所讨论的问题是否可以被捕获。 (Apple 的文档似乎遵循了这一理念。)

(更新以关注答案而不是语义。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 2.1 do-try-catch 未捕获错误 的相关文章

  • webapp 在 iOS 7 中无法正确缩放

    有人遇到同样的问题吗 content width device width 当我的 iphone 仍然是 i0S 6 并且我刚刚更新到 iOS 7 并且似乎不再工作时它就可以工作 或者可能是其他原因导致了问题 有人有什么想法吗 现在我正在使
  • Xcode 的 Organizer 窗口中没有“Use for Development”

    我今天注册了 Apple 的 99 美元 iOS 开发计划 在 Xcode 中的证书 标识符和配置文件下 无论我单击什么 它都会告诉我 将您的设备连接到 Mac 然后在 Xcode 的管理器窗口中单击 用于开发 使用与您的 iOS 开发者计
  • 找不到“folly/Portability.h”文件 React 库

    我的 React Native 项目在 Xcode 上遇到构建失败 错误是 folly Portability h file not found 在过去的几天里 我一直在尝试自己解决这个问题 但无法解决 RN info React Nati
  • 在iOS中启动应用程序时如何复制sqlite数据库?

    每次启动应用程序时 我想将带有最新更新的 sqlite 数据库从数据库位置复制到我的 iOS 应用程序 有什么办法可以做到吗 您可以将以下方法添加到您的应用程序委托中 void copyDatabaseIfNeeded Using NSFi
  • 在 ios 7 设备上获取多个应用程序图标

    我在 ios7 iPhone5 设备 上遇到一个奇怪的错误 我在ios7上使用xcode5安装了iPhone应用程序我的问题是每当我在设备上安装应用程序时 我都会收到多个应用程序图标 多次使用相同的名称 我还尝试通过我的系统使用不同的应用程
  • iPhone 拒绝了发布请求 未说明

    iPhone 拒绝了发布请求 内部启动错误 进程启动失败 未指定 这个错误让我抓狂 我似乎无法解决它 我从发现的所有地方都做了以下操作 刷新证书 注销并进入开发者苹果帐户 下载手动证书 删除 Apple 全球证书 重新启动 Mac 和 iP
  • 如何使用UIPageViewController跳转到特定页面?

    我正在使用 Xcode 8 的默认基于页面的应用程序 并且我一直在尝试跳转到特定页面 而不是左右滑动来转动 我在 StackOverflow 上发现了类似的问题 但答案大多建议使用这种方法 setViewControllers direct
  • 找不到映射模型(Cocoa 错误 134140)

    基本上 我有一个版本xcdatamodel我正在从 V2 迁移到 V3 我创建了一个Mapping Model具有自定义策略 一旦PersistenStoreCoordinator试图完成它的工作 我打了一个Cocoa错误号134140 找
  • clickedButtonAtIndex 方法未被调用

    当用户点击按钮时UIAlertView the clickedButtonAtIndex应该调用方法 但是 它没有 in the h我已经打电话给UIAlertView协议 interface RechercherViewControlle
  • 从 CMSampleBuffer 播放音频

    我在 iOS 中为群组创建了一个视频聊天应用程序 我一直在寻找一些方法来分别控制不同参与者的音频音量 我找到了使用静音和取消静音的方法isPlaybackEnabled in RemoteAudioTrack 但不控制音量 我还想我们是否可
  • 如何从 UIActivityViewController 获取标题和 messageBody 元数据到自定义 UIActivity?

    从 iOS 13 开始 您可以创建一个UIActivityViewController用一个UIActivityItemsConfiguration 那有一个perItemMetadataProvider允许您提供标题和消息正文的回调 完成
  • ios safari - getUserMedia 无法正常工作

    我真的有this https stackoverflow com q 45692526 6048715问题 但 OP 的解决方案对我不起作用 重申一下 我正在使用navigator mediaDevices getUserMedia 在浏览
  • UITableViewCell 中的自定义 VoiceOver 操作

    When a UITableView是可编辑的 其UITableViewCells允许用户在 VoiceOver 打开时执行自定义操作 当 VoiceOver 光标位于单元格上时 用户可以通过向上或向下滑动来听到可用的操作 然后通过双击屏幕
  • 如何为长时间运行的函数设置超时?

    我有一个带有一些代码的函数 可能需要很长时间才能完成 如果该功能花费的时间超过特定时间 我希望该功能停止继续 我怎样才能实现这个 我尝试了下面的解决方案 但它不会停止执行 override func viewDidLoad super vi
  • TTTAttributedLabel可以检测链接,但无法正确按下

    我正在使用 TTTAttributedLabel 来检测链接 这是我初始化标签的代码 TTTAttributedLabel getLinkLabelWithSize CGSize size text NSString text TTTAtt
  • 长按 UIButton

    我想知道如果有人按住 UIButton 按键的时间过长 我是否可以捕获 UIButton 的事件 通过通知或其他机制 比按一次按钮的时间更长 假设有人按住按钮几秒钟 谢谢 你可以加UILongPressGestureRecognizer h
  • 在 WatchKit 和主机 App 中使用具有不同标志的同一文件

    我试图在我的 watchkit 扩展和主机应用程序中使用相同的代码 但在主机应用程序中使用一些附加代码 在 watchkit 扩展中使用一些附加代码 为此 我在各自的目标上添加了 WATCH 和 APP swift 标志 问题是 当我在选择
  • 错误 ITMS-90168:“您上传的二进制文件无效。”

    我正在尝试将应用程序上传到 App Store 它包含一个 watchOS 2 应用程序 watchOS 1 扩展和一些 iOS 扩展 我不明白为什么会发生这种情况 当我使用 Xcode 7 的 上传到 App Store 功能 或使用应用
  • 将相机移动到点击的 SCNNode

    我在用着SceneKit and Swift尝试移动相机 使其 聚焦 在所选节点上 我知道我启用了 defaultCameraController 但我试图通过调整相机的位置dolly rotate and translateInCamer
  • UIDocumentsInteractionController 显示 iBooks 但不打开它

    我的 UIDocumentsInteractionController 正在工作 提供一个带有 iBooks 按钮的操作表 但是当我单击该按钮时 它只是关闭并且不会将我带到 iBooks 这是我的代码 NSString filenamePa

随机推荐

  • 如何使图像弯曲到其宽度?

    如何防止图像被拉伸超过其自然 200 像素宽度 footer display flex img flex 1 margin 1em
  • 简单的JSp和servlet代码可以迁移到Spring框架吗?

    我是网络开发的新手 我正在使用 servlet 和 JSP 进行 Web 开发 但是 我最近了解到 Spring 框架适合包含 servlet jsp 等的开发 所以 我的问题是我现在可以使用 Spring 框架运行我的程序吗 比如 我有
  • AS3 中的 Flash 翻页卷曲效果

    我正在开发一个项目 需要使用 Flash 开发翻页 卷曲 效果 如下例所示 http www actionscript org showMovie php id 459http www actionscript org showMovie
  • 没有着色器的 OpenGL

    我已经阅读了一些教程来编写以下代码 唯一的区别是原始教程使用 SDL 而不是 GLEW 我不明白这段代码有什么问题 它可以编译 但我没有看到三角形 教程也没有使用着色器 include
  • 使用 Python 3 通过 way2sms 发送短信

    我一直在尝试使用 way2sms 发送免费短信 我发现这个链接似乎适用于 python 3 https github com shubhamc183 way2sms https github com shubhamc183 way2sms
  • Google 聊天机器人 - 发送私人消息而不发生事件

    我有一个正在 PM 中工作的机器人 我可以与它交谈并让它毫无问题地完成我的任务 但我不知道如何让它向特定的其他人发送消息 我希望它能够向特定的用户列表发送私人消息 而无需这些用户的任何交互 唯一的交互是我发出的命令 要求它向其他人发送消息
  • JavaFx - 线程“JavaFX 应用程序线程”中的无尽异常 java.lang.NullPointerException

    我得到以下异常 甚至无法理解它出现在什么地方 这意味着什么 Exception in thread JavaFX Application Thread java lang NullPointerException at com sun ja
  • 在asp.net中生成PDF文件[重复]

    这个问题在这里已经有答案了 可能的重复 如何制作pdf https stackoverflow com questions 575584 how to make pdf 在 Asp net 中创建 pdf 文件 https stackove
  • Raspberry 3 上的 GSM/GPRS 模块与 Android Things 原生集成

    我想知道是否有任何方法可以使 GPRS GSM 模块 SIM800L 作为 android 中的 默认 连接 允许浏览互联网并使用 Android 库发出请求 似乎不是 因为如this https stackoverflow com a 4
  • html 中字体标签的最佳替代品

    自从fontHTML 中的标签在 HTML5 中已被弃用 我明白为什么 是否有一个干净的解决方案可以将某些属性和样式仅应用于portions段落文本 我正在使用 JavaScript 来解析 XML 文件 该文件依赖于以下事实 font标签
  • 处理单元测试和集成测试之间的重复

    我有一个由多个类实现的算法 所有类都由单元测试覆盖 我想重构它 这将改变两个类的行为 当我更改一个类及其测试时 所有单元测试都会通过 但在重构完成之前算法会变得不正确 这个例子说明 单元测试的完全覆盖有时是不够的 我需要在输入输出方面对整个
  • Android WebView 未加载 URL

    我想加载URL http www teluguoneradio com rssHostDescr php hostId 147 in WebView 我使用了以下代码 webView WebView findViewById R id we
  • 学说迁移phar,如何设置类型映射?

    我想在我的非 symfony 项目中使用学说迁移 所以我从https github com doctrine migrations https github com doctrine migrations 我正确配置了所有内容 数据库配置和
  • Angular Reactive Forms 模式验证:正则表达式无效

    我在 AngularJS 网站上有一个用于澳大利亚电话号码验证的正则表达式 我在反应式表单验证器中设置了确切的模式 如下所示 Validators pattern 0 1 0 61 2 4 3 7 8 0 1 0 1 0 9 2 0 1 0
  • Bootstrap 3.0.2 中的面包屑导航栏

    我是 Bootstrap 的新手 我想创建一个带有一些内容 链接 下拉菜单 和面包屑的导航栏 但是当我将面包屑放入导航栏中时 我的显示有问题 块 我认为 这是我的示例代码
  • 瑞典 SSN 正则表达式拒绝特定年龄以下的用户

    我的正则表达式有问题 我已经可以验证正确的瑞典社会安全号码以符合这些标准 YYMMDDNNNN 年月日 NNNN 年年月日DDNNNN YYYYMMDD NNNN 但如果用户未满 18 岁 我也想拒绝该用户注册 我的常规表达现在是这样的 有
  • 如何在flutter中仅在一页上阻止屏幕截图?

    我想知道如何仅在一页上阻止颤振中的屏幕截图 我读到有一种方法可以阻止颤振应用程序中的屏幕截图 方法是 getWindow addFlags LayoutParams FLAG SECURE 但我的理解是 当我这样做时 整个应用程序中的屏幕截
  • 如何在Python中删除图像的背景

    我有一个包含全角人类图像的数据集 我想删除这些图像中的所有背景 只留下全角人物 我的问题 有没有Python代码可以做到这一点 我是否需要每次都指定人员对象的坐标 这是使用 Python OpenCV 的一种方法 读取输入 转换为灰色 阈值
  • plm 与 lfe 中的聚类标准错误不同

    当我运行集群标准错误面板规范时plm and lfe我得到的结果在第二个有效数字处有所不同 有谁知道为什么他们对SE的计算不同 set seed 572015 library lfe library plm library lmtest c
  • Swift 2.1 do-try-catch 未捕获错误

    这是我的 Swift 2 1 代码片段 发生的错误显示在错误出现处的注释中 错误显示在调试面板中 并且应用程序崩溃 该应用程序永远不会打印 catch 中的行 也不会按预期优雅地返回 let audioFileURL receivedAud