0

Я пытаюсь сохранить простой массив объектов в постоянной памяти, выполнив следующий код:архивирования и разархивирования Массивы в DocumentDirectory в Swift

let fileManager=NSFileManager() 
    let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 

    if urls.count>0{ 

     let localDocumentsDirectory=urls[0] 
     let archivePath=localDocumentsDirectory.URLByAppendingPathExtension("meditations.archive") 
     NSKeyedArchiver.archiveRootObject(self.meditationsArray, toFile: archivePath.path!) 
     let restored=NSKeyedUnarchiver.unarchiveObjectWithFile(archivePath.path!) 

     print("restored \(restored)") 
    } 
} 

Тем не менее, когда я печатаю восстановленное дату, как и в код я нахожу нуль.
И наоборот, если я использую CachesDirectory, массив вскоре после восстановления прекратится,
, но когда я снова открою приложение и попытаюсь загрузить данные, он будет потерян. Каков правильный способ постоянного сохранения данных?

ответ

0

Я думаю, проблема в том, что вы используете URLByAppendingPathExtension, когда вы должны использовать URLByAppendingPathComponent. «Расширение пути» - это расширение файла, поэтому ваш archivePath «~/Documents.meditations.archive». Возможно, он временно работает с CachesDirectory, потому что он помещает данные во временный файл где-нибудь или может просто прочитать его обратно из памяти. Это должно исправить это:

let fileManager = NSFileManager() 
let documentDirectoryUrls = fileManager.URLsForDirectory(.DocumentDirectory, .UserDomainMask) 

if let documentDirectoryUrl = documentDirectoryUrls.first { 
    let fileUrl = documentDirectoryUrl.URLByAppendingPathComponent("meditations.archive") 

    // Also, take advantage of archiveRootObject's return value to check if 
    // the file was saved successfully, and safely unwrap the `path` property 
    // of the URL. That will help you catch any errors. 
    if let path = fileUrl.path { 
     let success = NSKeyedArchiver.archiveRootObject(meditationArray, toFile: path) 

     if !success { 
      print("Unable to save array to \(path)") 
     } 
    } else { 
     print("Invalid path") 
    } 
} else { 
    print("Unable to find DocumentDirectory for the specified domain mask.") 
}