80 lines
2.4 KiB
Swift
80 lines
2.4 KiB
Swift
//
|
|
// Example
|
|
// man
|
|
//
|
|
// Created by man 11/11/2018.
|
|
// Copyright © 2020 man. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class CrashStoreManager {
|
|
|
|
var crashArray: [_CrashModel] = [_CrashModel]()
|
|
|
|
static let shared = CrashStoreManager()
|
|
private init() {
|
|
crashArray = self.getCrashs()
|
|
}
|
|
|
|
//MARK: - public
|
|
func addCrash(_ crash: _CrashModel) {
|
|
if self.crashArray.count >= 1000 {
|
|
if self.crashArray.count > 0 {
|
|
self.crashArray.remove(at: 0)
|
|
}
|
|
}
|
|
self.crashArray.append(crash)
|
|
archiveCrashs(self.crashArray)
|
|
}
|
|
|
|
func removeCrash(_ model: _CrashModel) {
|
|
if let index = self.crashArray.firstIndex(where: { (crash) -> Bool in
|
|
return crash.id == model.id
|
|
}) {
|
|
self.crashArray.remove(at: index)
|
|
}
|
|
archiveCrashs(self.crashArray)
|
|
}
|
|
|
|
func resetCrashs() {
|
|
if self.crashArray.count > 0 {
|
|
self.crashArray.removeAll()
|
|
UserDefaults.standard.removeObject(forKey: "crashArchive_CocoaDebug")
|
|
UserDefaults.standard.removeObject(forKey: "crashCount_CocoaDebug")
|
|
UserDefaults.standard.synchronize()
|
|
}
|
|
}
|
|
|
|
//MARK: - private
|
|
private func archiveCrashs(_ crashs: [_CrashModel]) {
|
|
do {
|
|
var dataArchive: Data
|
|
if #available(iOS 11.0, *) {
|
|
dataArchive = try NSKeyedArchiver.archivedData(withRootObject: crashs, requiringSecureCoding: false)
|
|
} else {
|
|
// Fallback on earlier versions
|
|
dataArchive = NSKeyedArchiver.archivedData(withRootObject: crashs)
|
|
}
|
|
UserDefaults.standard.set(dataArchive, forKey: "crashArchive_CocoaDebug")
|
|
UserDefaults.standard.set(crashs.count, forKey: "crashCount_CocoaDebug")
|
|
UserDefaults.standard.synchronize()
|
|
} catch {}
|
|
}
|
|
|
|
private func getCrashs() -> [_CrashModel] {
|
|
guard let data = UserDefaults.standard.object(forKey: "crashArchive_CocoaDebug") as? Data else {return []}
|
|
do {
|
|
if #available(iOS 9.0, *) {
|
|
let dataArchive = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)
|
|
return dataArchive as! [_CrashModel]
|
|
} else {
|
|
// Fallback on earlier versions
|
|
return []
|
|
}
|
|
} catch {
|
|
return []
|
|
}
|
|
}
|
|
}
|