簡體   English   中英

如何將數據保存到plist文件中的多維數組

[英]How to save data to multidimensional array in plist file

我想將一些配置數據保存到我的plist文件中,該文件包含數組和常規變量類型。 看起來像這樣:

http://s10.postimg.org/f2xpgur1l/plist.png )(對不起,我無法附加任何圖像)

我執行此操作的函數如下所示:

// Saves the data into a plist file
func saveObject(i_fileName: String, i_keyForValueToSave: String, i_valueToSave: String, i_keyForXInitializer:String, i_valueXInitializer: String) {

    var fileName: String = i_fileName

    var keyForValueToSave: String = i_keyForValueToSave
    var valueToSave: AnyObject = i_valueToSave

    var keyForXInitializer: String = i_keyForXInitializer
    var valueXInitializer: String = i_valueXInitializer

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
    let documentsDirectory = paths.objectAtIndex(0) as! NSString
    let path = documentsDirectory.stringByAppendingPathComponent(fileName)

    var dict: NSMutableDictionary = [keyForXInitializer: valueXInitializer]

    //saving values
    dict.setObject(valueToSave, forKey: keyForValueToSave)

    //writing to plist
    dict.writeToFile(path, atomically: false)

    let resultDictionary = NSMutableDictionary(contentsOfFile: path)
    println("Saved Data.plist file is --> \(resultDictionary?.description)")
}

我這樣稱呼它:

saveObject("Selection.plist", "Item 0", "testConfig, "Item 3", "XInitializerItem_01")

結果如下所示:

http://s13.postimg.org/kbq103707/result.png )(對不起,我無法附加任何圖像)

如您所見,應保存到數組中的“ testConfig”將作為普通字符串保存在pilst文件中。 這不是我的目標。 我想添加到此數組的每個項目。 我在SWIFT中確實很新,但在空間上卻停留了一段時間。 任何幫助將是巨大的! 謝謝!

您將valueToSave聲明為AnyObject但它包含i_valueToSave ,該i_valueToSave在函數參數中聲明為String

因此,當您執行dict.setObject(valueToSave, forKey: keyForValueToSave)它將保存一個String

您應該將i_valueToSave函數參數的類型聲明為AnyObject而不是String ,然后在函數內部可以將i_valueToSave轉換為所需的類型,然后再進行保存。

假設i_valueToSave是一個字符串數組,然后:

if let valueToSave = i_valueToSave as? [String] {
    dict.setObject(valueToSave, forKey: keyForValueToSave)
}

如果是NSArray:

if let valueToSave = i_valueToSave as? NSArray {
    dict.setObject(valueToSave, forKey: keyForValueToSave)
}

等等。

下面的代碼創建了您需要的plist,您只需要正確填充值即可滿足您的需求

func saveObject(i_fileName: String, i_keyForValueToSave: String, i_valueToSave: String, i_keyForXInitializer:String, i_valueXInitializer: String) {

    var fileName: String = i_fileName
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
    let documentsDirectory = paths.objectAtIndex(0) as! NSString
    let path = documentsDirectory.stringByAppendingPathComponent(fileName)

    var dict = NSMutableDictionary()
    var item0 = [1,2,3]
    var item1 = [1,2,3,4]
    var item2 = false
    var item3 = "xInitializerItem_01"
    dict.setObject([item0, item1, item2, item3], forKey: "selection_01")
    item0 = [4,5,6]
    item1 = [5,6,7,8]
    item2 = true
    item3 = "xInitializerItem_02"
    dict.setObject([item0, item1, item2, item3], forKey: "selection_02")
    dict.writeToFile(path, atomically: true)

    let resultDictionary = NSMutableDictionary(contentsOfFile: path)
    println("Saved Data.plist file is --> \(resultDictionary?.description)")
}

這可能是由於上面的代碼導致的:

在此處輸入圖片說明

您無法將值追加到plist,因此每次保存時都需要再次保存所有值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM