Przeglądaj źródła

Merge pull request #620 from gram30/fix-background-crash

Use other method to enumerate contents, which causing crash(maybe only occurred for archved build)
Wei Wang 9 lat temu
rodzic
commit
4260203d40
1 zmienionych plików z 27 dodań i 31 usunięć
  1. 27 31
      Sources/ImageCache.swift

+ 27 - 31
Sources/ImageCache.swift

@@ -481,42 +481,38 @@ open class ImageCache {
         var cachedFiles = [URL: URLResourceValues]()
         var urlsToDelete = [URL]()
         var diskCacheSize: UInt = 0
-        
-        if let fileEnumerator = self.fileManager.enumerator(at: diskCacheURL, includingPropertiesForKeys: Array(resourceKeys), options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles, errorHandler: nil),
-           let urls = fileEnumerator.allObjects as? [URL]
-        {
-            for fileUrl in urls {
-                
-                do {
-                    let resourceValues = try fileUrl.resourceValues(forKeys: resourceKeys)
-                    // If it is a Directory. Continue to next file URL.
-                    if resourceValues.isDirectory == true {
-                        continue
-                    }
-                    
-                    // If this file is expired, add it to URLsToDelete
-                    if !onlyForCacheSize,
-                       let expiredDate = expiredDate,
-                       let lastAccessData = resourceValues.contentAccessDate,
-                       (lastAccessData as NSDate).laterDate(expiredDate) == expiredDate
-                    {
-                        urlsToDelete.append(fileUrl)
-                        continue
-                    }
 
-                    if let fileSize = resourceValues.totalFileAllocatedSize {
-                        diskCacheSize += UInt(fileSize)
-                        if !onlyForCacheSize {
-                            cachedFiles[fileUrl] = resourceValues
-                        }
+        for fileUrl in (try? fileManager.contentsOfDirectory(at: diskCacheURL, includingPropertiesForKeys: Array(resourceKeys), options: .skipsHiddenFiles)) ?? [] {
+
+            do {
+                let resourceValues = try fileUrl.resourceValues(forKeys: resourceKeys)
+                // If it is a Directory. Continue to next file URL.
+                if resourceValues.isDirectory == true {
+                    continue
+                }
+
+                // If this file is expired, add it to URLsToDelete
+                if !onlyForCacheSize,
+                    let expiredDate = expiredDate,
+                    let lastAccessData = resourceValues.contentAccessDate,
+                    (lastAccessData as NSDate).laterDate(expiredDate) == expiredDate
+                {
+                    urlsToDelete.append(fileUrl)
+                    continue
+                }
+
+                if let fileSize = resourceValues.totalFileAllocatedSize {
+                    diskCacheSize += UInt(fileSize)
+                    if !onlyForCacheSize {
+                        cachedFiles[fileUrl] = resourceValues
                     }
-                } catch _ { }
-            }
+                }
+            } catch _ { }
         }
-        
+
         return (urlsToDelete, diskCacheSize, cachedFiles)
     }
-    
+
 #if !os(macOS) && !os(watchOS)
     /**
     Clean expired disk cache when app in background. This is an async operation.