调用.append时,Swift字符串数组不保存数据
嗨,我有一个字符串数组=[“一”,“二”,“三”] 数据1,2,3已经在数组中,我想将新数据附加到数组中,附加起作用,第四个对象被附加,但在退出视图并再次返回它的位置后,这意味着它不保存它, 在谷歌搜索了很长一段时间后,什么也没找到。 我该怎么办? 如果NSUserdefaults字符串数组是唯一的解决方案调用.append时,Swift字符串数组不保存数据,swift,Swift,嗨,我有一个字符串数组=[“一”,“二”,“三”] 数据1,2,3已经在数组中,我想将新数据附加到数组中,附加起作用,第四个对象被附加,但在退出视图并再次返回它的位置后,这意味着它不保存它, 在谷歌搜索了很长一段时间后,什么也没找到。 我该怎么办? 如果NSUserdefaults字符串数组是唯一的解决方案 var HouseArray :[String] = [] let CarArray :[String] = [] let PartyArray :[String] = [] let Stu
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
- 获取托管对象上下文,就可以开始查询“数据库”,尽管它只是一个对象模型
如果在取消分配之前不保存附加到数组中的任何内容,并将数组重新初始化为“[”一“、”二“、”三“]`分配对象时,您希望发生什么?数据可能保存在哪里?请使用一些代码更新您的示例。很可能在您退出视图时,它正在被解除分配,因此您添加的任何数据都不会持久。我添加了代码,你们都对了,现在我要在解除分配之前保存它谢谢你的建议是什么?但是你能解释一下这个数组的分配吗?我的意思是,如果我附加了一个强大的属性,为什么它不分配和保存额外的对象自动?如果你认为我的答案回答你的问题,请考虑通过点击嘀嗒声来接受它。