Ho un file plist di esempio, favCities.plist. Questo è il mio codice di esempio:Scrivi nel file plist in Swift
override func viewDidLoad() {
super.viewDidLoad()
let path = NSBundle.mainBundle().pathForResource("favCities", ofType: "plist")
var plistArray = NSArray(contentsOfFile: path) as [Dictionary<String, String>]
var addDic: Dictionary = ["ZMV": "TEST", "Name": "TEST", "Country": "TEST"]
plistArray += addDic
(plistArray as NSArray).writeToFile(path, atomically: true)
var plistArray2 = NSArray(contentsOfFile: path)
for tempDict1 in plistArray2 {
var tempDict2: NSDictionary = tempDict1 as NSDictionary
var cityName: String = tempDict2.valueForKey("Name") as String
var cityZMV: String = tempDict2.valueForKey("ZMV") as String
var cityCountry: String = tempDict2.valueForKey("Country") as String
println("City: \(cityName), ZMV: \(cityZMV), Country: \(cityCountry)")
}
A prima vista, tutto funziona bene. L'output è simile al seguente:
City: Moscow, ZMV: 00000.1.27612, Country: RU
City: New York, ZMV: 10001.5.99999, Country: US
City: TEST, ZMV: TEST, Country: TEST
Ma quando interrompo l'applicazione, vedo che il mio file favCities.plist non è cambiata. Ci sono ancora due valori. Questi valori - City: TEST, ZMV: TEST, Country: TEST
- non sono stati aggiunti. Se riavvio l'applicazione, vedo nuovamente 3 righe di output, anche se dovrebbe esserci 4.
Cosa c'è che non va?
aggiornamento:
mi è stato cambiato il codice per questo:
override func viewDidLoad() {
super.viewDidLoad()
let fileManager = (NSFileManager.defaultManager())
let directorys : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
if (directorys! != nil){
let directories:[String] = directorys!;
let dictionary = directories[0];
let plistfile = "favCities.plist"
let plistpath = dictionary.stringByAppendingPathComponent(plistfile);
println("\(plistpath)")
var plistArray = NSArray(contentsOfFile: plistpath) as [Dictionary<String, String>]
var addDic: Dictionary = ["ZMV": "TEST", "Name": "TEST", "Country": "TEST"]
plistArray += addDic
(plistArray as NSArray).writeToFile(plistpath, atomically: false)
var plistArray2 = NSArray(contentsOfFile: plistpath)
for tempDict1 in plistArray2 {
var tempDict2: NSDictionary = tempDict1 as NSDictionary
var cityName: String = tempDict2.valueForKey("Name") as String
var cityZMV: String = tempDict2.valueForKey("ZMV") as String
var cityCountry: String = tempDict2.valueForKey("Country") as String
println("City: \(cityName), ZMV: \(cityZMV), Country: \(cityCountry)")
}
}
else {
println("ERROR!")
}
}
Ora, quando si esegue l'applicazione il numero di righe negli aumenti di uscita:
City: Moscow, ZMV: 00000.1.27612, Country: RU
City: New York, ZMV: 10001.5.99999, Country: US
City: TEST, ZMV: TEST, Country: TEST
City: TEST, ZMV: TEST, Country: TEST
........
MA! Se si visualizza il file favCities.plist, che si trova nella cartella del progetto (Project Navigator in Xcode), rimane invariato - ci sono due righe!
Se passeggiata lungo il sentiero, che è memorizzato nella variabile plistpath
-/Users/admin/Library/Developer/CoreSimulator/Devices/55FD9B7F-78F6-47E2-9874-AF30A21CD4A6/data/Containers/Data/Application/DEE6C3C8-6A44-4255-9A87-2CEF6082A63A/Documents/
Poi c'è un altro file di favCities.plist. Contiene tutte le modifiche che rendono l'applicazione. Che cosa sto facendo di sbagliato? Come posso vedere tutte le modifiche in un file che si trova nella cartella del progetto (Project Navigator)?
valore di controllo ritorno del 'writeToFile', e vedrete che non è riuscita. perché i file nel bundle principale sono di sola lettura –
possibili duplicati di [scrivere NSDictionary da plistare nel mio pacchetto di app] (http://stackoverflow.com/questions/2502193/writing-nsdictionary-to-plist-in-my-app-bundle) –
(Quindi tutti gli errori tipici nelle applicazioni iOS che sono stati realizzati utilizzando Objective-C, ora vengono nuovamente creati utilizzando Swift :-) –