2017-06-17 126 views
0

我知道其他人问过这个问题,但是,我正在努力在我自己的项目中实现该解决方案。我正在为学校创建一个计划应用程序,并且我想将用户的类存储在一个ClassInfo对象的数组中。下面是创建该对象我的ClassInfo类:使用Swift存储自定义对象数组3

class ClassInfo: NSObject { 
var name = String() 
var room = String() 
var period = Int() 

init(name: String, room: String, period: Int) { 
    self.name = name 
    self.room = room 
    self.period = period 
} 

required init(coder aDecoder: NSCoder) { 
    self.name = aDecoder.decodeObject(forKey: "name") as! String 
    self.room = aDecoder.decodeObject(forKey: "room") as! String 
    self.period = aDecoder.decodeObject(forKey: "period") as! Int 
} 

func encode(with aCoder: NSCoder) { 
    aCoder.encode(self.name, forKey: "name") 
    aCoder.encode(self.room, forKey: "room") 
    aCoder.encode(self.period, forKey: "period") 
} 
} 

以我初始视图控制器,I创建类阵列是这样的:

var classes = [ClassInfo]() 
let defaults = UserDefaults.standard 

这是我的代码,用于将一类到所述阵列:

let c = ClassInfo(name: className.text!, room: roomNumber.text!, period: period.selectedSegmentIndex + 1) 
classes.insert(c, at: periodsSelected.index(of: period.selectedSegmentIndex + 1)!) 
//How do I actually update the array in UserDefaults? 

最后,我想将数组中的类放入UITableView中。这里是我迄今为止做的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = Bundle.main.loadNibNamed("ScheduleTableViewCell", owner: self, options: nil)?.first as! ScheduleTableViewCell 
    cell.classLabelView.text = "\(classes[indexPath.row].name)" 
    cell.classPeriodLabel.text = "\(classes[indexPath.row].period)" 
    cell.roomLabel.text = "\(classes[indexPath.row].room)" 
    cell.isUserInteractionEnabled = true 
    cell.selectionStyle = .none 
    return cell 
} 

基本上,我只是想利用具有类的名称,周期和房间号我的自定义的ClassInfo对象来保存用户的类。

回答

0
  1. 如何实际更新UserDefaults中的数组?

您必须将其替换为之前存储的值。

但也因为你正在和自定义对象的阵列,则必须将其转换成NSData的或数据的第一和然后将其存储在像UserDefaults:

UserDefaults.standard.set("ENTER_YOUR_DATA", forKey:"ENTER_YOUR_TAG") 
UserDefaults.standard.synchronise() 
  • 你为什么使用NSObject?
  • 你可以通过使用结构做同样的和节省存储空间,才使可变来实现相同的功能的功能。

    相关问题