2016-06-02 13 views
3

Here sind meine Dateien.Swift - Lesen/Schreiben Array von Arrays zu/von Datei

Wie kann ich schreiben dieses Array:

var listOfTasks = [["Hi", "Hello", "12:00"],["Hey there", "What's up?", "3:17"]]

zu einer .txt Datei (file.txt)? Ich weiß, dass es andere Fragen dazu gibt, aber sie sind in anderen Sprachen (nicht Swift). Ich möchte, dass es auf einem echten iPhone funktioniert. Gerne stelle ich Ihnen bei Bedarf zusätzliche Informationen zur Verfügung. Ich bin neu in Swift, also entschuldige meine Frage, wenn es zu einfach scheint. HINWEIS: Ich frage speziell nach Arrays mit Arrays.

Vielen Dank im Voraus!

+0

Wo soll diese Textdatei leben? auf deinem Computer? am Telefon? –

+0

@LukePatterson Am Telefon. Warum wird diese Frage abgelehnt? – atirit

+0

Duplizieren: http://stackoverflow.com/questions/24097826/read-and-write-data-from-text-file –

Antwort

1

Sie sollten NSKeyedArchiver/NSKeyedUnarchiver verwenden, um Ihr Array als Eigenschaftslistendatei anstelle einer Textdatei zu lesen/schreiben. Sie können Ihre Datei in den Ordner Einstellungen in der Library-Ordner speichern:

let preferencesDirectory = try! NSFileManager().URLForDirectory(.LibraryDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true).URLByAppendingPathComponent("Preferences", isDirectory: true) 

let listOfTasksURL = preferencesDirectory.URLByAppendingPathComponent("listOfTasks.plist") 

var listOfTasks: [[String]] { 
    get { 
     return NSKeyedUnarchiver.unarchiveObjectWithFile(listOfTasksURL.path!) as? [[String]] ?? [] 
    } 
    set { 
     NSKeyedArchiver.archiveRootObject(newValue, toFile: listOfTasksURL.path!) 
    } 
} 

Wenn Sie es auf einem Spielplatz-Datei testen möchten können Sie es auf die Dokumente Verzeichnis speichern müssen:

let documentsDirectory = try! NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) 

let listOfTasksURL = documentsDirectory.URLByAppendingPathComponent("listOfTasks.plist") 

var listOfTasks: [[String]] { 
    get { 
     return NSKeyedUnarchiver.unarchiveObjectWithFile(listOfTasksURL.path!) as? [[String]] ?? [] 
    } 
    set { 
     NSKeyedArchiver.archiveRootObject(newValue, toFile: listOfTasksURL.path!) 
    } 
} 

listOfTasks = [["Hi", "Hello", "12:00"],["Hey there", "What's up?", "3:17"]] 

listOfTasks // [["Hi", "Hello", "12:00"], ["Hey there", "What's up?", "3:17"]] 
+0

Dieser Code scheint für ein Array von Strings zu sein; Ich habe ein Array, das Arrays enthält, die wiederum ** mehrere Strings pro Sub-Array ** enthalten. Oder vielleicht implementiere ich den Code nicht richtig. EDIT: Sorry, mein Schlechter, war nicht sehr klar. Oder funktioniert dieser Code für mehrere? – atirit

+0

@ghostpotato getan dies ändert nicht viel von dem Code –

2

bereits answered you in your other question:

Hier ist ein volles Arbeits Spielplatz Beispiel:

let fileUrl = NSURL(fileURLWithPath: "/tmp/foo.plist") // Your path here 
let listOfTasks = [["Hi", "Hello", "12:00"], ["Hey there", "What's up?", "3:17"]] 

// Save to file 
(listOfTasks as NSArray).writeToURL(fileUrl, atomically: true) 

// Read from file 
let savedArray = NSArray(contentsOfURL: fileUrl) as! [[String]] 

print(savedArray)