我正试图在Swift3程序中捕获所有NSExceptions - 一直关注this Stack Overflow answer
所以我得到了这个:
import play.api.libs.json.Json
import play.api.libs.json.JsObject
case class Item (id:Long,name:String,price:Double)
object SerializingListIntoJSON {
def details(itemList: Seq[Item]) = {
**Json.arr(itemList.map(item => Json.obj("id" -> item.id,"name" -> item.name,"price" -> item.price)): _*)**
}
def main(args: Array[String]): Unit = {
val itemList = Seq(Item(1, "Programming Scala", 49.99), Item(2, "Scala in Action", 44.99))
println(details(itemList))
}
}
但是没有调用异常 相反,我得到了这个输出:
2016-09-04 14:49:14.252 catchAllErrorsTest [8126:164827]设置失败 (contentViewController)用户定义的检查属性(NSWindow): *** - [__ NSArray0 objectAtIndex:]:索引99超出空NSArray的界限
我也尝试将异常放入AppDelegate(在applicationWillFinishLaunching和applicationDidFinishLaunching中),但结果相同
答案 0 :(得分:0)
我做了如下操作,并在Swift 3中为我工作。 将您的NSSetUncaughtExceptionHandler定义为AppDelegate中任何方法声明之外的常量:
let uncaughtExceptionHandler : Void = NSSetUncaughtExceptionHandler { exception in
NSLog("Name:" + exception.name.rawValue)
if exception.reason == nil
{
NSLog("Reason: nil")
}
else
{
NSLog("Reason:" + exception.reason!)
}
}
这会在任何未捕获的异常触发,因为只要App Delegate实例加载(即在应用程序启动时),就会评估此常量。 注意:Void类型声明删除了Void推断类型的编译器警告,该类型可能是意外的" ;-)。