Ios 在NSUserdefault swift中存储结构

Ios 在NSUserdefault swift中存储结构,ios,swift,struct,nsmutablearray,nsuserdefaults,Ios,Swift,Struct,Nsmutablearray,Nsuserdefaults,请我需要这个代码的帮助,任何你能提供的帮助将不胜感激 我目前有一个结构,在将值放入表之前,我使用该结构保存值,但当应用程序重新启动时,值消失,我尝试使用nsuserdefaults(但nsuserdefaults不保存结构)。是否有其他方法可以在应用程序重新启动时保存这些值 用于保存为NSUserDefault的NSObject …用于从NSUserDefault获取的位 我的主要问题是,当我调用第二个func(getPlans)时,应用程序崩溃,控制台提到了一些关于对不可变对象使用可变方法的内

请我需要这个代码的帮助,任何你能提供的帮助将不胜感激

我目前有一个结构,在将值放入表之前,我使用该结构保存值,但当应用程序重新启动时,值消失,我尝试使用nsuserdefaults(但nsuserdefaults不保存结构)。是否有其他方法可以在应用程序重新启动时保存这些值

用于保存为NSUserDefault的NSObject

…用于从NSUserDefault获取的位


我的主要问题是,当我调用第二个func(getPlans)时,应用程序崩溃,控制台提到了一些关于对不可变对象使用可变方法的内容。

即使将可变数组保存到
NSUserDefaults
,也不能保证返回可变数组

您需要获取数组的
.mutableCopy()
,以确保您正在操作可变数组

确保同时为
tempArray1
tempArray2
更改此选项

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()

    }

}
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)
            }
        }
    }
if let tempArray1 = defaults.objectForKey("pNameArray") as? NSArray {
    if (tempArray1.count > 0) {
       pNameArray = tempArray1.mutableCopy() as! NSMutableArray
    }
}