在 NSUserdefault swift 中存储结构
Store Struct in NSUserdefault swift
我需要有关此代码的帮助,非常感谢您提供的任何帮助。
我目前有一个结构,我在将它们放入 table 之前用来保存值,但是当应用程序重新启动时,这些值消失了,我尝试使用 nsuserdefaults(但 nsuserdefaults 不保存结构) .是否有另一种方法可以在应用程序重新启动时保存这些值??
用于保存到 NSUSERDEFAULTS 的 NSObject
import UIKit
var plannerMgr : plannerManager = plannerManager()
struct plan
{
var planName = "Un-Named"
var planDescription = "Un-Described"
}
var pNameArray = NSMutableArray()
var pDescArray = NSMutableArray()
class plannerManager: NSObject {
var plans = [plan]()
func addPlan(pName: String, pDesc: String) {
plans.append(plan(planName: pName, planDescription: pDesc))
pNameArray.addObject(pName)
pDescArray.addObject(pDesc)
defaults.setObject(pNameArray, forKey: "pNameArray")
defaults.setObject(pDescArray, forKey: "pDescArray")
defaults.synchronize()
}
}
...用于从 NSUSERDEFAULTS 获取的位
func getPlans() {
if let tempArray1 = defaults.objectForKey("pNameArray") as? NSMutableArray {
if (tempArray1.count > 0) {
pNameArray = tempArray1
}
}
if let tempArray2 = defaults.objectForKey("pDescArray") as? NSMutableArray {
if (tempArray2.count > 0) {
pDescArray = tempArray2
}
}
for name1 in pNameArray {
for desc1 in pDescArray {
println("add Plan: name1 = \(name1) && desc1 = \(desc1) **")
addPlan(name1 as! String, pDesc: desc1 as! String)
}
}
}
我的主要问题是,当我调用第二个 func (getPlans) 时,应用程序崩溃了,并且控制台提到了一些关于将 mutable 方法与 immutable 对象一起使用的内容。
即使将可变数组保存到 NSUserDefaults
,也不能保证能取回可变数组。
您需要获取数组的 .mutableCopy()
以确保您操作的是 可变 数组。
if let tempArray1 = defaults.objectForKey("pNameArray") as? NSArray {
if (tempArray1.count > 0) {
pNameArray = tempArray1.mutableCopy() as! NSMutableArray
}
}
确保为 tempArray1
和 tempArray2
更改此项。
我需要有关此代码的帮助,非常感谢您提供的任何帮助。
我目前有一个结构,我在将它们放入 table 之前用来保存值,但是当应用程序重新启动时,这些值消失了,我尝试使用 nsuserdefaults(但 nsuserdefaults 不保存结构) .是否有另一种方法可以在应用程序重新启动时保存这些值??
用于保存到 NSUSERDEFAULTS 的 NSObject
import UIKit
var plannerMgr : plannerManager = plannerManager()
struct plan
{
var planName = "Un-Named"
var planDescription = "Un-Described"
}
var pNameArray = NSMutableArray()
var pDescArray = NSMutableArray()
class plannerManager: NSObject {
var plans = [plan]()
func addPlan(pName: String, pDesc: String) {
plans.append(plan(planName: pName, planDescription: pDesc))
pNameArray.addObject(pName)
pDescArray.addObject(pDesc)
defaults.setObject(pNameArray, forKey: "pNameArray")
defaults.setObject(pDescArray, forKey: "pDescArray")
defaults.synchronize()
}
}
...用于从 NSUSERDEFAULTS 获取的位
func getPlans() {
if let tempArray1 = defaults.objectForKey("pNameArray") as? NSMutableArray {
if (tempArray1.count > 0) {
pNameArray = tempArray1
}
}
if let tempArray2 = defaults.objectForKey("pDescArray") as? NSMutableArray {
if (tempArray2.count > 0) {
pDescArray = tempArray2
}
}
for name1 in pNameArray {
for desc1 in pDescArray {
println("add Plan: name1 = \(name1) && desc1 = \(desc1) **")
addPlan(name1 as! String, pDesc: desc1 as! String)
}
}
}
我的主要问题是,当我调用第二个 func (getPlans) 时,应用程序崩溃了,并且控制台提到了一些关于将 mutable 方法与 immutable 对象一起使用的内容。
即使将可变数组保存到 NSUserDefaults
,也不能保证能取回可变数组。
您需要获取数组的 .mutableCopy()
以确保您操作的是 可变 数组。
if let tempArray1 = defaults.objectForKey("pNameArray") as? NSArray {
if (tempArray1.count > 0) {
pNameArray = tempArray1.mutableCopy() as! NSMutableArray
}
}
确保为 tempArray1
和 tempArray2
更改此项。