2016-02-08 4 views
0

Для приложения OS X с постоянным состоянием, все равно, чтобы программно определить, был ли последний раз приложение открыто, оно разбилось или неожиданно закрылось? (Таким образом, я могу выполнить некоторые действия, чтобы гарантировать, что приложение находится в согласованном состоянии)Обнаружение сбоя приложения в XCode/swift

+1

Возможный дубликат [Detect App аварии на старт] (HTTP: //stackoverflow.com/questions/33844313/detect-app-crash-on-launch) – kelin

ответ

0

Вы можете использовать NSSetUncaughtExceptionHandler, как описано here.

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") 
    } 
+0

К сожалению, я уже видел этот ответ где-то в другом месте, и это не работает для меня. Получить ошибку: указатель функции c может быть сформирован только из ссылки на func или литеральное закрытие. – user3601148

+0

Можете ли вы опубликовать код, который используете. Я использую эту технику для регистрации сбоев с Swift 2, и это работает для меня. У меня нет точного кода, который я использую со мной, но я могу опубликовать его через пару часов. – Michael

+0

Это просто просто вызов другой функции, которую я написал в классе быстрой работы внутри NSSetUncaughtExceptionHandler. Ваш код работает нормально, но я хочу установить и сохранить значение с помощью другой функции, которая дает мне ошибку, указанную выше. – user3601148

Смежные вопросы