我正在尝试将NSMutableArray保存到设备上的本地存储。为此,我遵循了一个教程,最后得到了这段代码:
func saveResolutions() {
let pathsArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDirectory = pathsArray[0] as String
let savePath = documentsDirectory.stringByAppendingPathComponent("resolution_list.plist")
resolutionItems.writeToFile(savePath, atomically: true)
print("Saved")
}
func loadResolutions() {
let pathsArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDirectory = pathsArray[0] as String
let resolutionListPath = documentsDirectory.stringByAppendingPathComponent("resolution_list.plist")
if NSFileManager.defaultManager().fileExistsAtPath(resolutionListPath){
resolutionItems = NSMutableArray(contentsOfFile: resolutionListPath)!
tableView.reloadData()
}
print("Loading Data From Storage")
}
为了澄清这一点,为了能够使用stringByAppendingPathComponents
,我使用SO帖子答案来扩展String,代码如下:
extension String {
func stringByAppendingPathComponent(path: String) -> String {
let nsSt = self as NSString
return nsSt.stringByAppendingPathComponent(path)
}
在示例项目中,这没有问题。它保存到文件,然后在下次启动时加载它。然而,当我试图实现它时,它根本不起作用。因此,我决定在保存后立即检查文件是否存在。要达到我正在使用的目的:
let pathsArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let documentsDirectory = pathsArray[0] as String
let resolutionListPath = documentsDirectory.stringByAppendingPathComponent("resolution_list.plist")
print(NSFileManager.defaultManager().fileExistsAtPath(resolutionListPath))
虽然这应该在保存后立即以逻辑方式打印true
(当我运行它时),它会打印false
。我尝试重新启动Xcode,清除派生数据,重置模拟器,但似乎没有任何帮助。它仍在返回false