如何将数据保存到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 的新手,我是 space 的新手。任何帮助都会很棒!谢谢!
您将 valueToSave
声明为 AnyObject
,但它包含 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,因此每次保存时都需要再次保存所有值
我想将一些配置数据保存到我的 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 的新手,我是 space 的新手。任何帮助都会很棒!谢谢!
您将 valueToSave
声明为 AnyObject
,但它包含 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,因此每次保存时都需要再次保存所有值