ios - 写入文本文件并在 Xcode 8 和 Swift 3 中跨应用程序重新启动时保持更改

标签 ios swift3 xcode8

<分区>

我正在尝试在一个基本的 iOS 应用程序中对文本文件(名为 data.txt,并存储在主项目文件夹中)执行非常简单的读取、写入和持久化操作。这只是一个学习练习。

我可以很好地从 data.txt 中读取预先存在的文本。当我写入文本文件并随后从中读取时,写入的文本就在那里。

但是,如果我停止我的应用程序模拟器,书面文本就会消失。

在应用程序重新启动时持久保存文件是否有技巧?

这是我的代码:

 var originalData : String = ""

//read from file
print("reading from data file")
if let path = Bundle.main.path(forResource: "data", ofType: "txt") {
  do {
    originalData = try String(contentsOfFile: path, encoding: .utf8)
    print("originalData = \(originalData)")
  }
  catch {
    print(error)
  }
}

//write to file
let newData = "\(originalData), new text"
print("writing to data file")
if let fileURL = Bundle.main.url(forResource: "data", withExtension: "txt") {
  do {
    try newData.write(to: fileURL, atomically: false, encoding: String.Encoding.utf8)
  }
  catch let error as NSError {
    print("Failed writing to URL: \(fileURL), Error: " + error.localizedDescription)
  }
}

//read from file
print("reading from data file again")
if let path = Bundle.main.path(forResource: "data", ofType: "txt") {
  do {
    let moreData = try String(contentsOfFile: path, encoding: .utf8)
    print("moreData = \(moreData)")
  }
  catch {
    print(error)
  }
}

打印的输出是:

reading from data file
originalData = Line 1 of data file

writing to data file
reading from data file again
moreData = Line 1 of data file
, new text

但是当我停止我的应用程序模拟器并打开 data.txt 时,内容只是:数据文件的第 1 行

最佳答案

你在这里试图做的事情毫无意义,是被严格禁止的:

if let fileURL = Bundle.main.url(forResource: "data", withExtension: "txt") {
  do {
    try newData.write(to: fileURL, atomically: false, encoding: String.Encoding.utf8)
  }

您正在运行的应用程序可能不会更改应用程序包中的文件!这是严重的安全违规行为。将文件复制到您的沙盒文档文件夹并在那里使用它。然后它将在重新启动应用程序时持续存在。

关于ios - 写入文本文件并在 Xcode 8 和 Swift 3 中跨应用程序重新启动时保持更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731219/

上一篇:ios - 从服务 Objective-C 获取数据

下一篇:ios - objective-c 中具有三个按钮(带图标)的自定义单元格

相关文章:

ios - 如何在 RestKit 0.20 中接收整数值?

ios - 当使用相同坐标绘制的图像形成圆弧时,CGRect 中绘制的文本标签形成椭圆弧

ios - View Controller 的最佳组织

json - 用 alamofire 改变编码体

ios - 'ValidationError' 无法转换为 'Error' ;您的意思是使用 'as!' 强制向下转换吗?

xcode8 - Xcode 8 中的多行注释

ios - Xcode (9.3) 中未命中断点

ios - 从 Mac 访问 CloudKit 数据库?

ios - 在 Swift 中,不能子类泛型 : class Foo<T> : T {}

ios - 有什么办法可以将 Xcode 项目从 8 降级到 7?