Explorar o código

【综合】背景偶发crash修复

tangchao hai 11 meses
pai
achega
b5c9de3bdd

+ 6 - 4
PDF Office/PDF Master/Class/Batch/Data/KMBackgroundObject.swift

@@ -31,11 +31,13 @@ import Cocoa
     private var _image: NSImage?
     var image: NSImage? {
         set {
-            self.image = newValue
+            self._image = newValue
         }
         get {
             if let data = self.imagePath, FileManager.default.fileExists(atPath: data) {
-                return NSImage(contentsOfFile: data)
+                if let img = NSImage(contentsOfFile: data) {
+                    return img
+                }
             }
             return self._image
         }
@@ -46,7 +48,7 @@ import Cocoa
     }
     
     required init?(coder: NSCoder) {
-        super.init()
+//        super.init()
         
         self.type = KMBackgroundType(rawValue: coder.decodeInteger(forKey: "type")) ?? .color
         self.color = coder.decodeObject(forKey: "color") as? NSColor ?? .clear
@@ -61,7 +63,7 @@ import Cocoa
         self.pagesString = coder.decodeObject(forKey: "pagesString") as? String ?? ""
         self.pageRangeType = KMBatchOperatePageChoice(rawValue: coder.decodeInteger(forKey: "pageRangeType")) ?? .All
         self.backgroundID = coder.decodeObject(forKey: "backgroundID") as? String ?? ""
-        self.image = coder.decodeObject(forKey: "image") as? NSImage
+        self._image = coder.decodeObject(forKey: "image") as? NSImage
     }
     
     //拷贝其他数据的值

+ 7 - 2
PDF Office/PDF Master/Class/PDFTools/Background/New/View/KMAddBackgroundView.swift

@@ -428,8 +428,13 @@ class KMAddBackgroundView: KMBaseXibView, NSComboBoxDelegate {
             tBackground.type = .color
         }
         if background.imagePath.count != 0 {
-            let image = NSImage(contentsOfFile: background.imagePath)!
-            tBackground.setImage(image)
+            if let data = background.image {
+                tBackground.setImage(data)
+            } else {
+                if let image = NSImage(contentsOfFile: background.imagePath) {
+                    tBackground.setImage(image)
+                }
+            }
             tBackground.type = .image
         }
 

+ 49 - 1
PDF Office/PDF Master/Class/PDFTools/Background/tool/KMBackgroundManager.swift

@@ -7,16 +7,30 @@
 
 import Cocoa
 
-class KMBackgroundManager: NSObject {
+class KMBackgroundManager: NSObject, NSCoding {
     let kBackgroundFolderPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(Bundle.main.bundleIdentifier!).stringByAppendingPathComponent("background")
     let kBackgroundPlistPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(Bundle.main.bundleIdentifier!).stringByAppendingPathComponent("background").stringByAppendingPathComponent("background.plist")
     
     var datas: Array<KMBackgroundModel> = []
     
+    var backgroundObjects: [KMBackgroundObject] = []
+    
     static let defaultManager = KMBackgroundManager()
     
     override init() {
         super.init()
+        
+        if let storedData = UserDefaults.standard.value(forKey: "kBackgroundInfoSaveKey") as? Data {
+            NSKeyedUnarchiver.setClass(KMBackgroundObject.self, forClassName: "KMBackgroundObject")
+            NSKeyedUnarchiver.setClass(KMBackgroundManager.self, forClassName: "KMBackgroundManager")
+            if let man = NSKeyedUnarchiver.unarchiveObject(with: storedData) as? KMBackgroundManager {
+                for object in man.backgroundObjects {
+                    let model = self.parseObject(object: object)
+                    self.datas.append(model)
+                }
+            }
+        }
+        
         if (FileManager.default.fileExists(atPath: kBackgroundPlistPath!)) {
             let dataDict = NSDictionary(contentsOfFile: kBackgroundPlistPath!)
             if (dataDict == nil) {
@@ -51,6 +65,16 @@ class KMBackgroundManager: NSObject {
         }
     }
     
+    required init?(coder: NSCoder) {
+        if let data = coder.decodeObject(forKey: "backgroundObjects") {
+            self.backgroundObjects = data as? [KMBackgroundObject] ?? []
+        }
+    }
+    
+    func encode(with coder: NSCoder) {
+        coder.encode(self.backgroundObjects, forKey: "backgroundObjects")
+    }
+    
     func addTemplate(model: KMBackgroundModel) -> Bool {
         if (!FileManager.default.fileExists(atPath: kBackgroundFolderPath!)) {
             let create: ()? = try?FileManager.default.createDirectory(atPath: kBackgroundFolderPath!, withIntermediateDirectories: false)
@@ -367,6 +391,30 @@ class KMBackgroundManager: NSObject {
         return model
     }
     
+    private func parseObject(object: KMBackgroundObject) -> KMBackgroundModel {
+        let model = KMBackgroundModel()
+        
+        model.type = object.type
+        if (model.type == .file) {
+            model.image = object.image
+            model.imagePath = object.imagePath ?? ""
+        } else {
+            model.color = object.color
+        }
+        
+        model.scale = object.scale
+        model.rotation = object.rotation.cgFloat
+        model.opacity = object.opacity
+        model.verticalMode = object.verticalMode
+        model.verticalSpace = object.verticalSpace.cgFloat
+        model.horizontalMode = object.horizontalMode
+        model.horizontalSpace = object.horizontalSpace.cgFloat
+        model.pageRangeType = KMWatermarkeModelPageRangeType.init(rawValue: object.pageRangeType.rawValue) ?? .all
+        model.pagesString = object.pagesString
+        
+        return model
+    }
+    
     private func tagString() -> String {
         var result: String = ""
         

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

@@ -49,9 +49,14 @@
 
 * 签名 KMSignatureAnnotationViewController
 
+* 水印
 * 水印模板 KMBatchOperateAddWatermarkViewController
 * 水印模板编辑 KMWatermarkWindowController
 
+* 背景
+* 背景模板 KMBatchOperateAddWatermarkViewController
+* 背景模板编辑 KMBackgroundWindowController
+
 ## What's New
 * KMFunctionGuideWindowController
 

+ 16 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -68,5 +68,21 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "664AB72E-8C4D-476B-9EA9-45A7876BA50E"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Master/Class/Batch/Data/KMBackgroundObject.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "92"
+            endingLineNumber = "92"
+            landmarkName = "encode(with:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>