瀏覽代碼

【编辑工具】页眉页脚,bates码存储 -- 优化完善

lizhe 10 月之前
父節點
當前提交
dbb77b4366

+ 5 - 0
PDF Office/PDF Master/Class/PDFTools/HeaderFooter/Base/KMHeaderFooterAdjectiveModel.swift

@@ -15,6 +15,11 @@ enum KMHeaderFooterObjectType: Int {
 @objcMembers class KMHeaderFooterAdjectiveModel: KMWatermarkAdjectiveBaseModel , NSCoding {
     var type: KMHeaderFooterObjectType = .headerFooter
     
+    // 是否数据迁移(原App数据迁移)
+    var isMigrate = false
+    // 是否已被更新
+    var isUpdated = false
+    
     var leftMargin: Int = 30
     var rightMargin: Int = 30
     var bottomMargin: Int = 30

+ 37 - 29
PDF Office/PDF Master/Class/PDFTools/HeaderFooter/Tools/KMHeaderFooterManager.swift

@@ -1,6 +1,11 @@
 import Foundation
 
+let kHeaderFooterFolderPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(Bundle.main.bundleIdentifier!).stringByAppendingPathComponent("headerFooter")
+let kHeaderFooterPlistPath = kHeaderFooterFolderPath?.stringByAppendingPathComponent("headerFooter.plist") ?? ""
+let kHeaderFooterRemovedKey = "kHeaderFooterRemovedKey"
+
 private let kHeaderFooterInfoSaveKey = "kHeaderFooterInfoSaveKey"
+let kHeaderFooterManagerInit = "kHeaderFooterManagerInit"
 
 class KMHeaderFooterManager: NSObject, NSCoding {
     var headFooterObjects: [KMHeaderFooterObject] = []
@@ -23,15 +28,22 @@ class KMHeaderFooterManager: NSObject, NSCoding {
 
     func reloadData() {
         do {
-            self.fetchPlistData()
-            
             if let storedData = UserDefaults.standard.value(forKey: kHeaderFooterInfoSaveKey) as? Data {
                 NSKeyedUnarchiver.setClass(KMHeaderFooterObject.self, forClassName: "KMHeaderFooterObject")
                 NSKeyedUnarchiver.setClass(KMHeaderFooterManager.self, forClassName: "KMHeaderFooterManager")
-                if let man = NSKeyedUnarchiver.unarchiveObject(with: storedData) as? KMHeaderFooterManager {
-                    self.headFooterObjects = man.headFooterObjects
+                
+                let pHeadFooterObjects = self.fetchPlistData()
+                self.headFooterObjects = pHeadFooterObjects
+                if UserDefaults.standard.object(forKey: kHeaderFooterManagerInit) == nil {
+                    if let man = NSKeyedUnarchiver.unarchiveObject(with: storedData) as? KMHeaderFooterManager {
+                        UserDefaults.standard.set("1", forKey: kHeaderFooterManagerInit)
+                        for object in  man.headFooterObjects {
+                            object.isMigrate = true
+                            self.headFooterObjects.append(object)
+                        }
+                    }
+                    
                     self.savePlistData()
-                    print(man)
                 }
             }
         } catch {
@@ -105,18 +117,21 @@ class KMHeaderFooterManager: NSObject, NSCoding {
     }
 
     func store() {
-        do {
-            let encodedObject = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
-            UserDefaults.standard.set(encodedObject, forKey: kHeaderFooterInfoSaveKey)
-            UserDefaults.standard.synchronize()
-        } catch {
-            print("Error while encoding object: \(error)")
-        }
+//        do {
+//            let encodedObject = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
+//            UserDefaults.standard.set(encodedObject, forKey: kHeaderFooterInfoSaveKey)
+//            UserDefaults.standard.synchronize()
+//        } catch {
+//            print("Error while encoding object: \(error)")
+//        }
+        self.savePlistData()
     }
 
     func clearStored() {
         UserDefaults.standard.removeObject(forKey: kHeaderFooterInfoSaveKey)
         UserDefaults.standard.synchronize()
+        
+        try?FileManager.default.removeItem(atPath: kHeaderFooterPlistPath)
     }
 
     func fetchHeaderFooterAvailableName() -> String {
@@ -148,41 +163,34 @@ class KMHeaderFooterManager: NSObject, NSCoding {
     }
 }
 
-
-let kHeaderFooterFolderPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(Bundle.main.bundleIdentifier!).stringByAppendingPathComponent("headerFooter")
-let kHeaderFooterPlistPath = kHeaderFooterFolderPath?.stringByAppendingPathComponent("headerFooter.plist")
-let kHeaderFooterRemovedKey = "kHeaderFooterRemovedKey"
-
 extension KMHeaderFooterManager {
-    func fetchPlistData() {
+    func fetchPlistData() -> [KMHeaderFooterObject] {
         if (!FileManager.default.fileExists(atPath: kHeaderFooterFolderPath!)) {
             try?FileManager.default.createDirectory(atPath: kHeaderFooterFolderPath!, withIntermediateDirectories: false)
         }
         
-        if (!FileManager.default.fileExists(atPath: kHeaderFooterPlistPath!)) {
-            FileManager.default.createFile(atPath: kHeaderFooterPlistPath!, contents: nil)
+        if (!FileManager.default.fileExists(atPath: kHeaderFooterPlistPath)) {
+            FileManager.default.createFile(atPath: kHeaderFooterPlistPath, contents: nil)
         }
-        print("页眉页脚文件地址 =" + kHeaderFooterPlistPath!)
+        print("页眉页脚文件地址 =" + kHeaderFooterPlistPath)
         
-        let plistData = try NSData(contentsOfFile: kHeaderFooterPlistPath!)
+        let plistData = try NSData(contentsOfFile: kHeaderFooterPlistPath)
         // 解档 plist 数据
-        if let headerFooterObject = try NSKeyedUnarchiver.unarchiveObject(with: plistData as! Data) as? KMHeaderFooterObject {
+        if let headerFooterObjects = try NSKeyedUnarchiver.unarchiveObject(with: plistData as! Data) as? [KMHeaderFooterObject] {
             // 如果解档成功,可以使用 headerFooterObject
-            print("Header footer object: \(headerFooterObject)")
+            print("Header footer object: \(headerFooterObjects)")
+            return headerFooterObjects
         } else {
             print("Failed to unarchive header footer object")
+            return []
         }
-    
-        
-        let dictionary = NSDictionary(contentsOfFile: kHeaderFooterPlistPath!)
-        return
     }
     
     func savePlistData() {
         // 获取 KMHeaderFooterObject 对象的归档数据
         if let archivedData = try? NSKeyedArchiver.archivedData(withRootObject: headFooterObjects, requiringSecureCoding: false) {
             // 将数据写入 plist 文件
-            let plistURL = URL(fileURLWithPath: kHeaderFooterPlistPath!)
+            let plistURL = URL(fileURLWithPath: kHeaderFooterPlistPath)
             do {
                 try archivedData.write(to: plistURL)
                 print("Header footer object saved to plist file")