【问题标题】:Detecting application crash in XCode/swift在 XCode/swift 中检测应用程序崩溃
【发布时间】:2016-02-08 01:27:59
【问题描述】:

对于具有持久状态的 OS X 应用程序,是否可以以编程方式检测应用程序上次打开、崩溃或意外关闭的时间? (所以我可以执行一些操作来确保应用程序处于一致状态)

【问题讨论】:

标签: xcode swift crash


【解决方案1】:

您可以按照here 的描述使用NSSetUncaughtExceptionHandler。

    NSSetUncaughtExceptionHandler { exception in
        print("Exception: \(exception.name) 
                          \(exception.reason!)
                          \(exception.description)")
        print(exception.callStackSymbols)
    }

我使用的代码是……

NSSetUncaughtExceptionHandler {
    exception in
    ExceptionManager.handle(exception)
}

而 ExceptionManager 类包括...

class ExceptionManager {

    class func handle(exception: NSException) {
        var exceptions = [ExceptionItem]()
        if let items = NSUserDefaults.standardUserDefaults().arrayForKey("UncaughtExceptions") as? [NSData] {
            for item in items {
                if let exception = NSKeyedUnarchiver.unarchiveObjectWithData(item) as? ExceptionItem {
                    exceptions.append(exception)
                }
            }
        }

        let newItem = ExceptionItem(NSDate(), exception)
        exceptions.insert(newItem, atIndex: 0)
        if exceptions.count > 5 { // Only keep the last 5 exceptions
            exceptions = Array(exceptions[0..<5])
        }

        var items = [NSData]()
        for e in exceptions {
            let item = NSKeyedArchiver.archivedDataWithRootObject(e) as NSData
            items.append(item)
        }
        NSUserDefaults.standardUserDefaults().setObject(items, forKey: "UncaughtExceptions")
    }

【讨论】:

  • 不幸的是,我已经在其他地方看到了这个答案,它对我不起作用。报错:c 函数指针只能由对 func 或文字闭包的引用构成
  • 你能贴出你正在使用的代码吗?我正在使用这种技术来记录 Swift 2 的崩溃,它对我有用。我没有与我一起使用的确切代码,但我应该能够在几个小时内发布它。
  • 它只是简单地调用我在 NSSetUncaughtExceptionHandler 内的 swift 类中编写的另一个函数。您的代码工作正常,但我想通过另一个函数设置和保存一个值,这给了我上述错误。
  • NSSetUncaughtExceptionHandler { 打印异常("Exception: (exception.name)") writeToPlist(true) }
  • 我已经更新了我正在做的事情。主要区别是我使用单独的类和类方法。你需要 self.writeToPlist 吗?或者只是采取简单的路径并复制我正在做的事情。
猜你喜欢
  • 2015-09-29
  • 2016-09-10
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 2016-02-23
相关资源
最近更新 更多