调用.append时,Swift字符串数组不保存数据

调用.append时,Swift字符串数组不保存数据,swift,Swift,嗨,我有一个字符串数组=[“一”,“二”,“三”] 数据1,2,3已经在数组中,我想将新数据附加到数组中,附加起作用,第四个对象被附加,但在退出视图并再次返回它的位置后,这意味着它不保存它, 在谷歌搜索了很长一段时间后,什么也没找到。 我该怎么办? 如果NSUserdefaults字符串数组是唯一的解决方案 var HouseArray :[String] = [] let CarArray :[String] = [] let PartyArray :[String] = [] let Stu

嗨,我有一个字符串数组=[“一”,“二”,“三”]

数据1,2,3已经在数组中,我想将新数据附加到数组中,附加起作用,第四个对象被附加,但在退出视图并再次返回它的位置后,这意味着它不保存它, 在谷歌搜索了很长一段时间后,什么也没找到。 我该怎么办? 如果NSUserdefaults字符串数组是唯一的解决方案

var HouseArray :[String] = []
let CarArray :[String] = []
let PartyArray :[String] = []
let StudyArray :[String] = []
var FavoArray :[String] = []
let InsureArray :[String] = []
let ShoppingArray :[String] =  []
let CreditArray :[String] = []
let KidsArray :[String] = []

let SaveArray : [String] = []
let SaveData = NSUserDefaults.standardUserDefaults()

var ImageIs = "House"
var imgIndicator:Int = 0
var newStringIs:String!
 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    //GetTodaysMonthAndYear()
    WitchImageSelected()
    tableView.reloadData()


}

func WitchImageSelected(){

    ImageIs = SaveData.valueForKey("Image") as! String!

    switch(ImageIs){
    case "House":
        imgIndicator = 0

    case "Car":
        imgIndicator = 1
    case "Party":
        imgIndicator = 2
    case "Cart":
        imgIndicator = 3
    case "CreditCard":
        imgIndicator = 4
    case "Study":
        imgIndicator = 5
    case "Insure":
        imgIndicator = 6
    case "Favo":
        imgIndicator = 7
    case "Kids":
        imgIndicator = 8
    default: break
    }

    if(SaveData.valueForKey("newString") != nil){
        newStringIs = SaveData.valueForKey("newString") as! String!
        SaveData.setValue(nil, forKey: "newString")

  HouseArray.append(newStringIs)

    }
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    let Index = self.tableView.indexPathForSelectedRow
    if segue.identifier == "EnterPrice"{
        switch(imgIndicator){
        case 0: SaveData.setValue("\(HouseArray[Index!.row])", forKey: "NameLabel")
        case 1: SaveData.setValue("\(CarArray[Index!.row])", forKey: "NameLabel")
        case 2: SaveData.setValue("\(PartyArray[Index!.row])", forKey: "NameLabel")
        case 3: SaveData.setValue("\(ShoppingArray[Index!.row])", forKey: "NameLabel")
        case 4: SaveData.setValue("\(CreditArray[Index!.row])", forKey: "NameLabel")
        case 5: SaveData.setValue("\(StudyArray[Index!.row])", forKey: "NameLabel")
        case 6: SaveData.setValue("\(InsureArray[Index!.row])", forKey: "NameLabel")
        case 7: SaveData.setValue("\(FavoArray[Index!.row])", forKey: "NameLabel")
        case 8: SaveData.setValue("\(KidsArray[Index!.row])", forKey: "NameLabel")

        default: break
        }




}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


    switch(imgIndicator){
    case 0: return HouseArray.count
    case 1: return CarArray.count
    case 2: return PartyArray.count
    case 3: return ShoppingArray.count
    case 4: return CreditArray.count
    case 5: return StudyArray.count
    case 6: return InsureArray.count
    case 7: return FavoArray.count
    case 8: return KidsArray.count

    default: return 0
    }

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let SlideOutCell = tableView.dequeueReusableCellWithIdentifier("SlideCell", forIndexPath: indexPath) as UITableViewCell

    switch(imgIndicator){
    case 0: SlideOutCell.textLabel?.text = HouseArray[indexPath.row]
    case 1: SlideOutCell.textLabel?.text = CarArray[indexPath.row]
    case 2: SlideOutCell.textLabel?.text = PartyArray[indexPath.row]
    case 3: SlideOutCell.textLabel?.text = ShoppingArray[indexPath.row]
    case 4: SlideOutCell.textLabel?.text = CreditArray[indexPath.row]
    case 5: SlideOutCell.textLabel?.text = StudyArray[indexPath.row]
    case 6: SlideOutCell.textLabel?.text = InsureArray[indexPath.row]
    case 7: SlideOutCell.textLabel?.text = FavoArray[indexPath.row]
    case 8: SlideOutCell.textLabel?.text = KidsArray[indexPath.row]

    default: break
    }



    return SlideOutCell
}

}

当视图消失时,
ViewController
对象将从内存中释放,这意味着其中的所有内容都将丢失。你几乎没有办法找回丢失的数据

:(

这就是为什么您需要在释放vc之前将数据保存在某个位置。您可以将其保存在CoreData或
NSUserDefaults
中。我建议使用前者

NSUserDefaults
应用于保存用户首选项/设置,因此不适合将案例中的数据保存到
NSUserDefaults
。尤其是当数组越来越大时

要在CoreData中保存数据,大致需要执行以下操作:

  • 创建核心数据模型
  • 设计您的实体。我认为这将非常简单,只需添加一个实体并向其添加一个名为
    string
    的属性
  • 生成
    NSManagedObject
    子类
  • 获取托管对象上下文,就可以开始查询“数据库”,尽管它只是一个对象模型
要了解更多信息,请参阅本教程:


如果在取消分配之前不保存附加到数组中的任何内容,并将数组重新初始化为“[”一“、”二“、”三“]`分配对象时,您希望发生什么?数据可能保存在哪里?请使用一些代码更新您的示例。很可能在您退出视图时,它正在被解除分配,因此您添加的任何数据都不会持久。我添加了代码,你们都对了,现在我要在解除分配之前保存它谢谢你的建议是什么?但是你能解释一下这个数组的分配吗?我的意思是,如果我附加了一个强大的属性,为什么它不分配和保存额外的对象自动?如果你认为我的答案回答你的问题,请考虑通过点击嘀嗒声来接受它。