2017-03-11 3 views
0

Ich versuche, eine sehr einfache Lese-, Schreib-und Persistenz in einer Textdatei (namens data.txt, und im Hauptprojekt gespeichert) Ordner) in einer einfachen iOS-App. Dies ist nur eine Lernübung.In Textdatei schreiben und Änderung über den App-Neustart in Xcode 8 und Swift 3 beibehalten

Ich kann bereits vorhandenen Text aus data.txt gut lesen. Wenn ich in die Textdatei schreibe und danach davon lese, ist der geschriebene Text da.

Wenn ich jedoch meinen App-Simulator stoppe, verschwindet der geschriebene Text.

Gibt es einen Trick, um Dateien über App-Neustarts hinweg zu archivieren?

ist hier mein Code:

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) 
    } 
} 

Die Ausgabe gedruckt ist:

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 

Aber dann, wenn ich meine App-Simulator und offene data.txt stoppen, sind die Inhalte nur: Linie 1 Datendatei

Antwort

1

Was Sie versuchen, hier zu tun macht keinen Sinn und ist streng verboten:

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

Ihre laufende App ändert möglicherweise keine Datei in Ihrem App-Paket! Das ist eine grobe Sicherheitsverletzung. Kopieren Sie die Datei in Ihren Sandbox-Ordner "Dokumente" und arbeiten Sie mit ihr dort. Es bleibt dann beim erneuten Starten der App bestehen.

+0

Oh, ich wusste nicht, dass es so streng abgesperrt war. Vielen Dank! –

Verwandte Themen