Skip to content

Commit c39a303

Browse files
committed
Fixed error when loading the cache ofr first time (missing cache folder)
1 parent 9caabdd commit c39a303

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

SKCache/Classes/SKCache.swift

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public enum Operations: Swift.Error {
1818
case deletaFail
1919
case saveFail
2020
case loadFail
21+
case folderCreation
2122
}
2223

2324
/// Enum to indicate the live time of each time in the cache
@@ -159,15 +160,11 @@ public class SKCache: NSCache<AnyObject, AnyObject> {
159160
let cacheDirectory = try fileManager.url(for: .cachesDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
160161
let fileDirectory = cacheDirectory.appendingPathComponent("spacekit")
161162

162-
var isDirectory: ObjCBool = false
163-
164163
var fileDir = fileDirectory.absoluteString
165164
let range = fileDir.startIndex..<fileDir.index(fileDir.startIndex, offsetBy: 7)
166165
fileDir.removeSubrange(range)
167166

168-
if !fileManager.fileExists(atPath: fileDir, isDirectory: &isDirectory) {
169-
try fileManager.createDirectory(at: fileDirectory, withIntermediateDirectories: false, attributes: nil)
170-
}
167+
try createFolderIfNeeded(atPath: fileDir, absolutePath: fileDirectory)
171168

172169
for object in objects {
173170
let fileFormatedName = object.key.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? object.key
@@ -192,18 +189,22 @@ public class SKCache: NSCache<AnyObject, AnyObject> {
192189
let fileManager = FileManager.default
193190
do {
194191
let cacheDirectory = try fileManager.url(for: .cachesDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
195-
var fileDirectory = cacheDirectory.appendingPathComponent("spacekit").absoluteString
196-
let range = fileDirectory.startIndex..<fileDirectory.index(fileDirectory.startIndex, offsetBy: 7)
197-
fileDirectory.removeSubrange(range)
192+
let fileDirectory = cacheDirectory.appendingPathComponent("spacekit")
198193

199-
let paths = try fileManager.contentsOfDirectory(atPath: fileDirectory)
194+
var fileDir = fileDirectory.absoluteString
195+
let range = fileDir.startIndex..<fileDir.index(fileDir.startIndex, offsetBy: 7)
196+
fileDir.removeSubrange(range)
197+
198+
try createFolderIfNeeded(atPath: fileDir, absolutePath: fileDirectory)
199+
200+
let paths = try fileManager.contentsOfDirectory(atPath: fileDir)
200201

201202
for path in paths {
202-
if let object = NSKeyedUnarchiver.unarchiveObject(withFile: fileDirectory + path) as? SKObject {
203+
if let object = NSKeyedUnarchiver.unarchiveObject(withFile: fileDir + path) as? SKObject {
203204
if !object.isExpired {
204205
SKCache.shared.add(object: object)
205206
} else {
206-
try? fileManager.removeItem(atPath: fileDirectory + path)
207+
try? fileManager.removeItem(atPath: fileDir + path)
207208
}
208209
}
209210
}
@@ -229,5 +230,21 @@ public class SKCache: NSCache<AnyObject, AnyObject> {
229230

230231
// MARK: - Private methods
231232

233+
/// Private method to create the cache folder if it doesn't exist
234+
///
235+
/// - Parameter path: The path where the folder will be created
236+
private func createFolderIfNeeded(atPath path: String, absolutePath: URL) throws {
237+
let fileManager = FileManager.default
238+
var isDirectory: ObjCBool = false
239+
240+
do {
241+
if !fileManager.fileExists(atPath: path, isDirectory: &isDirectory) {
242+
try fileManager.createDirectory(at: absolutePath, withIntermediateDirectories: false, attributes: nil)
243+
}
244+
} catch {
245+
throw Operations.folderCreation
246+
}
247+
}
248+
232249
}
233250

0 commit comments

Comments
 (0)