Просмотр исходного кода

【综合】签名注释,查看证书的选项偶发crash修复

tangchao 8 месяцев назад
Родитель
Сommit
270173d1ea

+ 29 - 25
PDF Office/PDF Master/Class/DigtalSignature/ViewControllers/DSignatureDetailsViewController.swift

@@ -495,7 +495,7 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
     func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
         
         if self.detailsTableView.isEqual(tableView) {
-            let dic = self.certDatas.object(at: row) as! NSDictionary
+            let dic = self.certDatas.object(at: row) as? NSDictionary ?? [:]
             let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(tableColumn?.identifier.rawValue ?? ""), owner: self) as! NSTableCellView
             if ((tableColumn?.identifier.rawValue) == "name") {
                 cell.textField?.stringValue = dic.allKeys.first as! String
@@ -522,7 +522,11 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
     func tableViewSelectionDidChange(_ notification: Notification) {
         let tableView = notification.object
         if self.detailsTableView.isEqual(tableView) {
-            let model = self.models.object(at: self.tableView.selectedRow) as! CDSPDFSigntureModel
+            let row = self.tableView.selectedRow
+            if row < 0 || row >= self.models.count {
+                return
+            }
+            let model = self.models.object(at: row) as! CDSPDFSigntureModel
             let cert = model.certificate!
             
             let dateFormatter = DateFormatter.init()
@@ -535,22 +539,22 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
             } else if selectedRow == 1 {
                 switch cert.signatureAlgorithmType {
                 case .RSA_RSA:
-                    self.detailsTextView.string = String(format: "%@(%@)","RSA_RSA",cert.signatureAlgorithmOID)
+                    self.detailsTextView.string = String(format: "%@(%@)","RSA_RSA",cert.signatureAlgorithmOID ?? "")
                     break;
                 case .MD2RSA:
-                    self.detailsTextView.string = String(format: "%@(%@)","MD2RSA",cert.signatureAlgorithmOID)
+                    self.detailsTextView.string = String(format: "%@(%@)","MD2RSA",cert.signatureAlgorithmOID ?? "")
                     break;
                 case .MD4RSA:
-                    self.detailsTextView.string = String(format: "%@(%@)", "MD4RSA",cert.signatureAlgorithmOID)
+                    self.detailsTextView.string = String(format: "%@(%@)", "MD4RSA",cert.signatureAlgorithmOID ?? "")
                     break;
                 case .SHA1RSA:
-                    self.detailsTextView.string = String(format: "%@(%@)", "SHA1RSA",cert.signatureAlgorithmOID)
+                    self.detailsTextView.string = String(format: "%@(%@)", "SHA1RSA",cert.signatureAlgorithmOID ?? "")
                     break;
                 case .SHA256RSA:
-                    self.detailsTextView.string = String(format: "%@(%@)", "SHA256RSA",cert.signatureAlgorithmOID)
+                    self.detailsTextView.string = String(format: "%@(%@)", "SHA256RSA",cert.signatureAlgorithmOID ?? "")
                     break;
                 case .SM3SM2:
-                    self.detailsTextView.string = String(format: "%@(%@)", "SM3SM2",cert.signatureAlgorithmOID)
+                    self.detailsTextView.string = String(format: "%@(%@)", "SM3SM2",cert.signatureAlgorithmOID ?? "")
                     break;
                 default: break
                 }
@@ -558,9 +562,9 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
                 var string = ""
                 for key in cert.subjectDict.keys {
                     if (string.count == 0) {
-                        string = String(format: "%@=%@",key as! String, cert.subjectDict[key] as! String)
+                        string = String(format: "%@=%@",(key as? String) ?? "", (cert.subjectDict[key] as? String) ?? "")
                     } else {
-                        string = String(format: "%@\n%@=%@",string, (key as! String), cert.subjectDict[key] as! String)
+                        string = String(format: "%@\n%@=%@",string, (key as? String) ?? "", (cert.subjectDict[key] as? String) ?? "")
                     }
                 }
                 self.detailsTextView.string = string 
@@ -568,9 +572,9 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
                 var string = ""
                 for key in cert.issuerDict.keys {
                     if (string.count == 0) {
-                        string = String(format: "%@=%@",key as! String, cert.issuerDict[key] as! String)
+                        string = String(format: "%@=%@",(key as? String) ?? "", (cert.issuerDict[key] as? String) ?? "")
                     } else {
-                        string = String(format: "%@\n%@=%@",string, (key as! String), cert.issuerDict[key] as! String)
+                        string = String(format: "%@\n%@=%@",string, (key as? String) ?? "", (cert.issuerDict[key] as? String) ?? "")
                     }
                 }
                 self.detailsTextView.string = string
@@ -585,18 +589,18 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
                 for infoDic in cert.authorityInfoAccess {
                     let dic: Dictionary = infoDic
                     if content.count == 0 {
-                        content = String(format: "%@ = %@", dic["Method"] as! String, (dic["Method"] as! String))
+                        content = String(format: "%@ = %@", (dic["Method"] as? String) ?? "", (dic["Method"] as? String) ?? "")
                         content = content + "\n"
-                        let tString = String(format: "URL = %@", (dic["URI"] as! String))
+                        let tString = String(format: "URL = %@", (dic["URI"] as? String) ?? "")
                         content = content + tString
                     } else {
                         content = content + "\n"
                         content = content + "\n"
-                        var tString = String(format: "Method = %@", (dic["Method"] as! String))
+                        var tString = String(format: "Method = %@", (dic["Method"] as? String) ?? "")
                     
                         content = content + tString
                         content = content + "\n"
-                        tString = String(format: "URL = %@",(dic["URI"] as! String))
+                        tString = String(format: "URL = %@",(dic["URI"] as? String) ?? "")
                         content = content + tString
                     }
                 }
@@ -627,15 +631,15 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
                 var usageString = ""
                 for us in att {
                     if usageString.count == 0 {
-                        usageString = NSLocalizedString(us as! String, comment: "")
+                        usageString = NSLocalizedString((us as? String) ?? "", comment: "")
                     } else {
-                        usageString = String(format: "%@\n%@",usageString, NSLocalizedString(us as! String, comment: ""))
+                        usageString = String(format: "%@\n%@",usageString, NSLocalizedString((us as? String) ?? "", comment: ""))
                     }
                     
                     if usageString.count == 0 {
                        
                     } else {
-                        usageString = String(format: "%@\n%@",usageString, NSLocalizedString(us as! String, comment: ""))
+                        usageString = String(format: "%@\n%@",usageString, NSLocalizedString((us as? String) ?? "", comment: ""))
                     }
                 }
                 self.detailsTextView.string = usageString
@@ -655,17 +659,17 @@ class DSignatureDetailsViewController: NSViewController, NSTableViewDelegate, NS
                 }
                 self.detailsTextView.string = content
             } else if selectedRow == 13 {
-                self.detailsTextView.string = cert.basicConstraints.replacingOccurrences(of: ",", with: "\n")
+                self.detailsTextView.string = cert.basicConstraints?.replacingOccurrences(of: ",", with: "\n") ?? ""
             } else if selectedRow == 14 {
-                self.detailsTextView.string = cert.publicKey.replacingOccurrences(of: ":", with: " ")
+                self.detailsTextView.string = cert.publicKey?.replacingOccurrences(of: ":", with: " ") ?? ""
             } else if selectedRow == 15 {
-                self.detailsTextView.string = cert.subjectKeyIdentifier.uppercased()
+                self.detailsTextView.string = cert.subjectKeyIdentifier?.uppercased() ?? ""
             } else if selectedRow == 16 {
-                self.detailsTextView.string = cert.x509Data.replacingOccurrences(of: ":", with: " ")
+                self.detailsTextView.string = cert.x509Data?.replacingOccurrences(of: ":", with: " ") ?? ""
             } else if selectedRow == 17 {
-                self.detailsTextView.string = cert.sha1Digest.replacingOccurrences(of: ":", with: " ")
+                self.detailsTextView.string = cert.sha1Digest?.replacingOccurrences(of: ":", with: " ") ?? ""
             } else if selectedRow == 18 {
-                self.detailsTextView.string = cert.md5Digest.replacingOccurrences(of: ":", with: " ")
+                self.detailsTextView.string = cert.md5Digest?.replacingOccurrences(of: ":", with: " ") ?? ""
             }
         } else {
             self.detailsTextView.string = ""

+ 1 - 0
PDF Office/PDF Master/Class/README.md

@@ -188,6 +188,7 @@
 ## 数字签名
 
 * KMPDFDigitalSignViewController
+* 查看证书 DSignatureDetailsViewController
 
 ## 导入 [扫描仪 & 相册]