ios - 应用程序 ID 和读/写文件
问题描述
我正在从我的 iOS 应用程序中写入和读取文件:
func saveChecklistItems() {
let data = NSMutableData()
let archiver = NSKeyedArchiver(forWritingWith: data)
archiver.encode(items, forKey: "ChecklistItems")
archiver.finishEncoding()
print("save \(dataFileDir())")
data.write(toFile: dataFileDir(), atomically: true)
}
func loadChecklistItems() {
print("load \(dataFileDir())")
let path = dataFileDir()
if FileManager.default.fileExists(atPath: path) {
if let data = NSData.init(contentsOfFile: path) {
do {
let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data as Data)
items = unarchiver.decodeObject(forKey: "ChecklistItems") as! [CheckListItem]
unarchiver.finishDecoding()
} catch {
print(error)
}
}
}
}
func documentsDirectory() -> String {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as [String]
return paths[0]
}
func dataFileDir() -> String {
return documentsDirectory().appending("Checklists.plist")
}
但是每次我在 Xcode 中按 Run 时,应用程序都会使用新 ID 部署在我的 iPhone 上:
保存 /var/mobile/Containers/Data/Application/4684F231-7A41-461C-AD5C-FB0F66A9DA31/DocumentsChecklists.plist
加载/var/mobile/Containers/Data/Application/CFE42D59-6F3F-4D47-96B5-4F81C640127A/DocumentsChecklists.plist
这是我在 iOS 开发中的第一步,我想知道在这种情况下我需要做什么?将应用程序 ID 设置为静态?或者是其他东西 ?
解决方案
我建议您在处理文件夹和文件时使用 URL 而不是字符串
func documentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
func dataFileDir() -> URL {
return documentsDirectory().appendingPathComponent("Checklists.plist")
}
并将您的写入更改为
try data.write(to: dataFileDir(), options: .atomic)
推荐阅读
- javascript - Context Provider 内部的 React Router Switch 导致不断闪烁(重新渲染)
- django - 如何在 django 验证错误中更改日期格式
- react-apollo - 使用 useMutation 可能出现未处理的承诺拒绝警告
- html - 调整窗口大小时如何使图像响应?CSS & HTML5
- javascript - 升级 npm 包后功能变慢
- excel - 使用 vba 单击搜索按钮时,网页看不到在搜索框中输入的文本
- codeigniter - 制作一个生成一次(第一次)结果的方法,并在第一次存储时调用它并返回
- clips - 如何在 deffacts 构造中检索事实句柄?
- apache2 - iRedMail 0.9.9 与 Apache2,如何让 Web 界面正常工作
- c# - 查询选择器未返回预期结果