2017-06-17 1 views
0

Je comprends que d'autres personnes ont posé cette question, mais j'ai du mal à mettre en œuvre la solution dans mon propre projet. Je crée une application de planification pour l'école et je souhaite stocker les classes de l'utilisateur dans un tableau d'objets ClassInfo. Voici ma classe ClassInfo qui crée l'objet:Stockage d'un tableau d'objets personnalisés à l'aide de 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") 
} 
} 

Dans mon contrôleur de vue initial, je crée le tableau de classes comme ceci:

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

Ceci est mon code pour ajouter une classe au tableau :

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? 

Et enfin, je voudrais prendre les classes dans le tableau et les mettre dans un UITableView. Voici le code que j'ai jusqu'à présent pour le faire:

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 
} 

Fondamentalement, je veux juste sauver les classes de l'utilisateur à l'aide de mon objet ClassInfo personnalisé qui a un nom de classe, période, et le numéro de chambre.

Répondre

0
  1. Comment puis-je mettre à jour en fait le tableau dans UserDefaults?

Vous devez le remplacer par la valeur précédemment enregistrée.

Mais aussi parce que vous faites et tableau d'objets personnalisés, vous devez le convertir en NSData ou de données d'abord, puis le stocker dans UserDefaults comme:

UserDefaults.standard.set("ENTER_YOUR_DATA", forKey:"ENTER_YOUR_TAG") 
UserDefaults.standard.synchronise() 
  1. Pourquoi utilisez-vous NSObject?

Vous pouvez faire la même chose par l'utilisation de structures et économiser de la mémoire, juste faire les fonctions mutables pour obtenir les mêmes fonctionnalités.