2015-07-10 55 views
0

請使用此代碼獲得幫助,我們將非常感謝您提供的任何幫助。我已經嘗試使用nsuserdefaults(但nsuserdefaults不保存結構),但是當應用程序重新啓動時,值消失,我試圖使用nsuserdefaults(但nsuserdefaults不保存結構)。是否有另一種方法來保存這些值,即使應用程序重新啓動?在NSUserdefault中存儲結構swift

NSObject的內容保存到NSUserDefaults的

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)應用程序崩潰,並且控制檯提到了有關使用不可變對象的可變方法的一些事情。

回答

2

即使將可變數組保存到NSUserDefaults,也不保證可以返回可變數組。

您需要獲取陣列的.mutableCopy()以確保您正在操作可變的陣列。

if let tempArray1 = defaults.objectForKey("pNameArray") as? NSArray { 
    if (tempArray1.count > 0) { 
     pNameArray = tempArray1.mutableCopy() as! NSMutableArray 
    } 
} 

確保改變這一兩個tempArray1tempArray2

+0

感謝幫助很多,不得不做一些額外的 –