Browse Source

【Crash】图片block 回调野指针问题修复

lizhe 2 years ago
parent
commit
daa8bc5076

+ 18 - 66
KMAdvertisement.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -103,13 +103,13 @@
             filePath = "KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "144"
-            endingLineNumber = "144"
+            startingLineNumber = "147"
+            endingLineNumber = "147"
             landmarkName = "cancelAction(_:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "7D110CD4-7173-4A02-96B8-2FDCCD09D2B4 - 5b1f3f23b9dde571"
+                  uuid = "7D110CD4-7173-4A02-96B8-2FDCCD09D2B4 - 5b1f3f23b9dde4de"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -119,12 +119,12 @@
                   urlString = "file:///Volumes/Data/Company/kdan/Projects/CloudServer/KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "142"
-                  endingLineNumber = "142"
-                  offsetFromSymbolStart = "124">
+                  startingLineNumber = "147"
+                  endingLineNumber = "147"
+                  offsetFromSymbolStart = "600">
                </Location>
                <Location
-                  uuid = "7D110CD4-7173-4A02-96B8-2FDCCD09D2B4 - 5b1f3f23b9dde533"
+                  uuid = "7D110CD4-7173-4A02-96B8-2FDCCD09D2B4 - 5b1f3f23b9dde4de"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -134,8 +134,8 @@
                   urlString = "file:///Volumes/Data/Company/kdan/Projects/CloudServer/KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "144"
-                  endingLineNumber = "144"
+                  startingLineNumber = "147"
+                  endingLineNumber = "147"
                   offsetFromSymbolStart = "124">
                </Location>
             </Locations>
@@ -151,13 +151,13 @@
             filePath = "KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "155"
-            endingLineNumber = "155"
+            startingLineNumber = "158"
+            endingLineNumber = "158"
             landmarkName = "cancelAction(_:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "EEE29A07-8C3F-443F-BC48-75081682E8A7 - 5b1f3f23b9dde404"
+                  uuid = "EEE29A07-8C3F-443F-BC48-75081682E8A7 - 5b1f3f23b9dde761"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -167,12 +167,12 @@
                   urlString = "file:///Volumes/Data/Company/kdan/Projects/CloudServer/KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "153"
-                  endingLineNumber = "153"
-                  offsetFromSymbolStart = "1020">
+                  startingLineNumber = "158"
+                  endingLineNumber = "158"
+                  offsetFromSymbolStart = "1516">
                </Location>
                <Location
-                  uuid = "EEE29A07-8C3F-443F-BC48-75081682E8A7 - 5b1f3f23b9dde7c6"
+                  uuid = "EEE29A07-8C3F-443F-BC48-75081682E8A7 - 5b1f3f23b9dde761"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -182,8 +182,8 @@
                   urlString = "file:///Volumes/Data/Company/kdan/Projects/CloudServer/KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "155"
-                  endingLineNumber = "155"
+                  startingLineNumber = "158"
+                  endingLineNumber = "158"
                   offsetFromSymbolStart = "1020">
                </Location>
             </Locations>
@@ -301,53 +301,5 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "1316571D-D1E4-4E70-8BC0-F317FDA3B5B8"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "KMAdvertisement/UI/List/Mac/Cell/KMAdvertisementCollectionViewItem.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "48"
-            endingLineNumber = "48"
-            landmarkName = "updateColor(_:)"
-            landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "1316571D-D1E4-4E70-8BC0-F317FDA3B5B8 - 815eabff0068ad52"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "KMAdvertisement.KMAdvertisementCollectionViewItem.updateColor(Swift.Bool) -&gt; ()"
-                  moduleName = "KMAdvertisement"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Volumes/Data/Company/kdan/Projects/CloudServer/KMAdvertisement/UI/List/Mac/Cell/KMAdvertisementCollectionViewItem.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "48"
-                  endingLineNumber = "48"
-                  offsetFromSymbolStart = "15000">
-               </Location>
-               <Location
-                  uuid = "1316571D-D1E4-4E70-8BC0-F317FDA3B5B8 - b4ed8f74e94520ec"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "closure #1 (__C.NSImage) -&gt; () in KMAdvertisement.KMAdvertisementCollectionViewItem.updateColor(Swift.Bool) -&gt; ()"
-                  moduleName = "KMAdvertisement"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Volumes/Data/Company/kdan/Projects/CloudServer/KMAdvertisement/UI/List/Mac/Cell/KMAdvertisementCollectionViewItem.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "48"
-                  endingLineNumber = "48"
-                  offsetFromSymbolStart = "68">
-               </Location>
-            </Locations>
-         </BreakpointContent>
-      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 1 - 1
KMAdvertisement/KMAdvertisementCache/KMAdvertisementCache.swift

@@ -12,7 +12,7 @@ class KMAdvertisementCache: NSObject {
     public static let `default` = KMAdvertisementCache()
     //存储
     func saveData(data: [NSDictionary]) {
-        if (FileManager.default.fileExists(atPath: kFilePath as String)) {
+        if (!FileManager.default.fileExists(atPath: kFilePath as String)) {
             FileManager.default.createFile(atPath: kFilePath as String, contents: nil);
         }
         

+ 16 - 14
KMAdvertisement/Model/KMAdvertisementModelTransition.swift

@@ -13,23 +13,24 @@
 @objcMembers open class KMAdvertisementModelTransition: NSObject {
     //MARK: 模型转换
     //颜色模型转换
-    public static func transitionColor(color: KMAdvertisementModelItem.Color, highlight:Bool) -> UIColor {
+    public static func transitionColor(color: KMAdvertisementModelItem.Color?, highlight:Bool) -> UIColor {
         var result = UIColor.clear
+        guard let tempColor = color else { return result }
         
         if highlight {
-            let darkHex = color.height?.dark?.hex
-            let darkAlpha = color.height?.dark?.alpha
-            let universalHex = color.height?.universal?.hex
-            let universalAlpha = color.height?.universal?.alpha
+            let darkHex = tempColor.height?.dark?.hex
+            let darkAlpha = tempColor.height?.dark?.alpha
+            let universalHex = tempColor.height?.universal?.hex
+            let universalAlpha = tempColor.height?.universal?.alpha
             let light = NSColor.init(hex: universalHex ?? "").withAlphaComponent(CGFloat(universalAlpha ?? 1))
             let dark = NSColor.init(hex: darkHex ?? universalHex ?? "").withAlphaComponent(CGFloat(darkAlpha ?? universalAlpha ?? 1))
             
             result = KMAdvertisementConfig.adapterDark(light: light , dark: dark) as! NSColor
         } else {
-            let darkHex = color.normal?.dark?.hex
-            let darkAlpha = color.normal?.dark?.alpha
-            let universalHex = color.normal?.universal?.hex
-            let universalAlpha = color.normal?.universal?.alpha
+            let darkHex = tempColor.normal?.dark?.hex
+            let darkAlpha = tempColor.normal?.dark?.alpha
+            let universalHex = tempColor.normal?.universal?.hex
+            let universalAlpha = tempColor.normal?.universal?.alpha
             
             let light = NSColor.init(hex: universalHex ?? "").withAlphaComponent(CGFloat(universalAlpha ?? 1))
             let dark = NSColor.init(hex: darkHex ?? universalHex ?? "").withAlphaComponent(CGFloat(darkAlpha ?? universalAlpha ?? 1))
@@ -40,16 +41,17 @@
     }
     
     //图片转换
-    public static func transitionImagePath(image: KMAdvertisementModelItem.Image, highlight:Bool) -> String {
+    public static func transitionImagePath(image: KMAdvertisementModelItem.Image?, highlight:Bool) -> String {
         var result = ""
+        guard let tempImage = image else { return result }
         
         if highlight {
-            if image.height != nil {
-                result = transitionLanguage(langeuage: KMAdvertisementConfig.isDarkModel() ? image.height!.dark : image.height!.universal)
+            if tempImage.height != nil {
+                result = transitionLanguage(langeuage: KMAdvertisementConfig.isDarkModel() ? tempImage.height!.dark : tempImage.height!.universal)
             }
         } else {
-            if image.normal != nil {
-                result = transitionLanguage(langeuage: KMAdvertisementConfig.isDarkModel() ? image.normal?.dark : image.normal?.universal)
+            if tempImage.normal != nil {
+                result = transitionLanguage(langeuage: KMAdvertisementConfig.isDarkModel() ? tempImage.normal?.dark : tempImage.normal?.universal)
             }
         }
         

+ 6 - 3
KMAdvertisement/UI/List/Mac/Cell/KMAdvertisementCollectionViewItem.swift

@@ -36,7 +36,7 @@ class KMAdvertisementCollectionViewItem: NSCollectionViewItem {
     func updateColor(_ highlight: Bool) {
         
         if model.title?.color != nil {
-            self.titleLabel.textColor = KMAdvertisementModelTransition.transitionColor(color: (model.title?.color)!, highlight: highlight)
+            self.titleLabel.textColor = KMAdvertisementModelTransition.transitionColor(color: (model.title?.color), highlight: highlight)
         }
         
         if model.title?.background?.color != nil {
@@ -44,9 +44,12 @@ class KMAdvertisementCollectionViewItem: NSCollectionViewItem {
         }
         
         if model.imageURL != nil {
+            weak var weakSelf = self
             let url = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: model.imageURL!, highlight: highlight))
-            self.iconImageView.image = KMAdvertisementImage.imageWithURL(url: url, completion: { [unowned self] image in
-                self.iconImageView.image = image
+            self.iconImageView.image = KMAdvertisementImage.imageWithURL(url: url, completion: { image in
+                if weakSelf != nil {
+                    weakSelf!.iconImageView.image = image
+                }
             })
         }
     }

+ 15 - 9
KMAdvertisement/UI/Scroll/iOS/KMAdvertisementShowScroll_iOS.swift

@@ -133,17 +133,23 @@ extension KMAdvertisementShowScroll_iOS: UICollectionViewDataSource {
     
     public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
         let cell: KMAdvertisementShowScrollCell_iOS = collectionView.dequeueReusableCell(withReuseIdentifier: "KMAdvertisementShowScrollCell_iOS", for: indexPath) as! KMAdvertisementShowScrollCell_iOS
-        cell.cancelActionBlock = { [unowned self] in
-            if self.data != nil {
-                let model = (self.data?[indexPath.section])
-                let content = model?.content![indexPath.item]
-                self.presenter.deleteItem(item: content!)
+        weak var weakSelf = self
+        cell.cancelActionBlock = {
+            if weakSelf != nil {
+                if weakSelf.data != nil {
+                    let model = (weakSelf.data?[indexPath.section])
+                    let content = weakSelf.model?.content![indexPath.item]
+                    weakSelf.presenter.deleteItem(item: content!)
+                }
             }
         }
-        
-        cell.buttonActionBlock = { [unowned self] item in
-            if actionCompletion != nil {
-                actionCompletion!(.tap, item)
+
+        weak var weakSelf = self
+        cell.buttonActionBlock = { item in
+            if weakSelf != nil {
+                if weakSelf.actionCompletion != nil {
+                    weakSelf.actionCompletion!(.tap, item)
+                }
             }
         }
         

+ 5 - 2
KMAdvertisement/UI/View/Mac/KMAdvertisementShowView.swift

@@ -132,8 +132,11 @@ import Cocoa
 
             if self.data.count != 0 {
                 let url = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: self.data[index].imageURL!, highlight: false))
-                self.imageView.image = KMAdvertisementImage.imageWithURL(url: url, completion: { [unowned self] image in
-                    self.imageView.image = image
+                weak var weakSelf = self
+                self.imageView.image = KMAdvertisementImage.imageWithURL(url: url, completion: { image in
+                    if weakSelf != nil {
+                        weakSelf!.imageView.image = image
+                    }
                 })
             }
         }