在 Xcode 8 和 Swift 3 中写入文本文件并在应用重新启动时保持更改 [重复]

Posted

技术标签:

【中文标题】在 Xcode 8 和 Swift 3 中写入文本文件并在应用重新启动时保持更改 [重复]【英文标题】:Write to text file and persist change across app restart in Xcode 8 and Swift 3 [duplicate] 【发布时间】:2017-03-11 04:04:45 【问题描述】:

我正在尝试在一个基本的 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 行

【问题讨论】:

【参考方案1】:

您在这里尝试做的事情毫无意义,并且被严格禁止:

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

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

【讨论】:

哦,我不知道它被锁得这么严。谢谢!

以上是关于在 Xcode 8 和 Swift 3 中写入文本文件并在应用重新启动时保持更改 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 XCode 8.2 / Swift 3.0 中更改状态栏样式(没有“查看基于控制器的状态栏外观”)

在 Xcode 8 和 Swift 3.0 中删除覆盖后准备 segue 崩溃

在 Swift 3 和 Xcode 8 中从嵌套字典中获取值的问题

在 swift 3 xcode 8 中出现错误

xcode 8.3.3 是不是运行 swift 3.2

UITextViewDelegate 方法在 Swift 3 和 Xcode 8.0 中给出“使用未声明的类型 URL”错误