相关疑难解决方法(0)

在Swift中捕获NSException

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

cocoa-touch exception foundation nsexception swift

65
推荐指数
3
解决办法
2万
查看次数

如何在Swift中捕获"索引超出范围"?

我真的想在我的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)

uitableview ios swift

32
推荐指数
3
解决办法
3万
查看次数

有没有办法捕获或处理EXC_BAD_ACCESS?

据我所知,EXC_BAD_ACCESS会在您尝试访问不良内存时发生(如果我错了,请随时纠正我)?

有没有办法像在try-catchin中一样Java来防止总app失败?

iphone exc-bad-access objective-c ios

20
推荐指数
2
解决办法
2万
查看次数

快速的力 - 展开异常没有传播

我在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 swift2

17
推荐指数
2
解决办法
3716
查看次数

如何在Swift 2.0中正确处理NSFileHandle异常?

首先,我是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中做到这一点,我也不知道如何将两者混合在一起.

nsexception nsfilehandle ios swift swift2

16
推荐指数
1
解决办法
5174
查看次数

如何从Swift执行外部程序?

我是Swift的新手,我没有找到任何关于使用Swing语言执行外部程序或访问外部进程的信息.

是否可以在语言开发的当前阶段进行,或者我应该使用Objective-C?

也许有一些Objective-C库可以在我的Swift程序中使用?

谢谢.

objective-c swift

10
推荐指数
1
解决办法
5345
查看次数