Swift中的以下代码引发NSInvalidArgumentException异常:
task = NSTask()
task.launchPath = "/SomeWrongPath"
task.launch()
Run Code Online (Sandbox Code Playgroud)
我该如何捕捉异常?据我所知,Swift中的try/catch是针对Swift中抛出的错误,而不是针对像NSTask这样的对象引发的NSExceptions(我猜这是用ObjC编写的).我是Swift的新手,所以可能是我错过了一些明显的东西......
编辑:这是一个关于bug的雷达(特别是对于NSTask):openradar.appspot.com/22837476
我真的想在我的Swift代码中使用更简单的经典try catch块,但我找不到任何可以做到的东西.
我只需要:
try {
// some code that causes a crash.
}
catch {
// okay well that crashed, so lets ignore this block and move on.
}
Run Code Online (Sandbox Code Playgroud)
这是我的困境,当TableView重新加载新数据时,一些信息仍然存在于RAM中,它调用didEndDisplayingCell一个带有新空数据源的tableView崩溃.
所以我经常抛出异常 Index out of range
我试过这个:
func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
do {
let imageMessageBody = msgSections[indexPath.section].msg[indexPath.row] as? ImageMessageBody
let cell = tableView.dequeueReusableCellWithIdentifier("ImageUploadCell", forIndexPath: indexPath) as! ImageCell
cell.willEndDisplayingCell()
} catch {
print("Swift try catch is confusing...")
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
func tableView(tableView: UITableView, didEndDisplayingCell …Run Code Online (Sandbox Code Playgroud) 据我所知,EXC_BAD_ACCESS会在您尝试访问不良内存时发生(如果我错了,请随时纠正我)?
有没有办法像在try-catchin中一样Java来防止总app失败?
我在swift中遇到了这种愚蠢的行为,其中强制解包一个可选项不会传播.
从文档:
试着用!访问不存在的可选值会触发运行时错误.在使用之前,请务必确保可选项包含非零值!强行解开它的价值.
重现:
func foo(bar:String?) throws{
print(bar!);
}
Run Code Online (Sandbox Code Playgroud)
和
try foo(nil);
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不合逻辑或一致,我找不到有关此主题的任何文档.
这是设计的吗?
首先,我是iOS和Swift的新手,来自Android/Java编程背景.因此,对于我来说,尝试写入文件时捕获异常的想法是第二天性,如果缺少空间,文件权限问题或文件中可能发生的任何其他事情(根据我的经验,已发生) .我也明白,在Swift中,异常与Android/Java不同,所以这不是我在这里要求的.
我试图使用NSFileHandle附加到一个文件,如下所示:
let fileHandle: NSFileHandle? = NSFileHandle(forUpdatingAtPath: filename)
if fileHandle == nil {
//print message showing failure
} else {
let fileString = "print me to file"
let data = fileString.dataUsingEncoding(NSUTF8StringEncoding)
fileHandle?.seekToEndOfFile()
fileHandle?.writeData(data!)
}
Run Code Online (Sandbox Code Playgroud)
但是,函数seekToEndOfFile()和writeData()函数都表明它们会抛出某种异常:
如果文件描述符已关闭或无效,如果接收器表示未连接的管道或套接字端点,文件系统上没有剩余空闲空间,或者发生任何其他写入错误,则此方法引发异常. - Apple文档
writeData()
那么在Swift 2.0中处理这个问题的正确方法是什么?我读过的联系
斯威夫特语言错误处理,的try-catch斯威夫特例外,NSFileHandle写数据:异常处理,雨燕2.0的异常处理,以及如何捕捉在斯威夫特的例外,但他们都没有直接回答我的问题.我确实读过一些关于在Swift代码中使用objective-C的东西,但由于我是iOS新手,我不知道这个方法是什么,似乎无法在任何地方找到它.我还尝试了新的Swift 2.0 do-catch块,但他们没有意识到NSFileHandle方法会抛出任何类型的错误,很可能因为函数文档没有throw关键字.
我知道我可以让应用程序崩溃,如果它用完了空间或其他什么,但由于应用程序可能会在以后发布到应用商店,我不希望这样.那么我如何以Swift 2.0的方式做到这一点呢?
编辑: 这个目前只是一个只有Swift代码的项目,所以即使看起来有一种方法可以在Objective-C中做到这一点,我也不知道如何将两者混合在一起.
我是Swift的新手,我没有找到任何关于使用Swing语言执行外部程序或访问外部进程的信息.
是否可以在语言开发的当前阶段进行,或者我应该使用Objective-C?
也许有一些Objective-C库可以在我的Swift程序中使用?
谢谢.
swift ×5
ios ×4
nsexception ×2
objective-c ×2
swift2 ×2
cocoa-touch ×1
exception ×1
foundation ×1
iphone ×1
nsfilehandle ×1
uitableview ×1