我有一個應用程序周圍,需要堅持的字典數組的數組。 我不能將它保存到NSUserDefaults。 我可能會使用CoreData,如果我有它的經驗,但它似乎矯枉過正,我只需要在啓動時收集數據,並保存一次關閉。如何保存和檢索字典數組的數組
所以我想弄清楚如何寫這個保存到一個plist文件(如果可能的話)。 並在應用程序啓動時檢索它。
數據:
// Declare var
var recordingsDictionaryArray = [[:]]
// Populate many times during app use
recordingsDictionaryArray.insert(["name":saveRecordingField.stringValue, "date":NSDate(), "path":recorder.url], atIndex: 0)
所以詞典包含字符串的NSDate的混合物,而NSURL
可這在我的applicationSupport文件被保存到一個plist文件..? 希望不會在啓動時保存並重新構建它時將其分開。
我正在嘗試一個例子,但我不能得到它的工作,如果我沒有參考[0]的數據變種。如果我只是說VAR數據= recordingsDictionaryArray我得到的錯誤:
func applicationWillTerminate(aNotification: NSNotification) {
// add some dummy content to the empty recordingsDictionaryArray
recordingsDictionaryArray.insert(["name":"Recording One", "date":NSDate(), "path":"dummy path"], atIndex: 0) // dummy content
recordingsDictionaryArray.insert(["name":"Recording Two", "date":NSDate(), "path":"another dummy path"], atIndex: 0) // dummy content
recordingsDictionaryArray.insert(["name":"Recording Three", "date":NSDate(), "path":"final dummy path"], atIndex: 0) // dummy content
// check the count
var thecount = recordingsDictionaryArray.count
println(thecount)
var data = recordingsDictionaryArray[0] // if i do not add reference to item [0] data errors below
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var path = paths.stringByAppendingPathComponent("data.plist")
var fileManager = NSFileManager.defaultManager()
if (!(fileManager.fileExistsAtPath(path)))
{
var bundle: NSString = NSBundle.mainBundle().pathForResource("recordings", ofType: "plist")!
fileManager.copyItemAtPath(bundle, toPath: path, error:nil)
}
data.objectForKey(data)
data.writeToFile(path, atomically: true)
// I only get "Recording 3" saved to the plist
}
再回答下面的1: 我覺得我是接近NSUserDefaults的與到達那裏,但不知道如何讓mutableRetrievedDictionary回recordingsDictionaryArray爲它是在保存之前。
// save
NSUserDefaults.standardUserDefaults().setObject(recordingsDictionaryArray, forKey: "recordingsArray")
NSUserDefaults.standardUserDefaults().synchronize()
// retrieve
var mutableRetrievedDictionary: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("recordingsArray")?.mutableCopy()
請注意,從NSUserDefaults返回的數據總是不可變的,需要再次更改爲mutable。 – AMAN77 2014-11-21 15:07:04