我制作一个必须在NSUserDefault中保存的自定义项目的简单列表
import UIKit
@objc(Oggetto_ordinabile)
class Oggetto_ordinabile: NSObject,NSCoding {
var Nome_ita = ""
var numero:Int = 0
var Nome_internazionale = ""
var Immagine:UIImage = #imageLiteral(resourceName: "new_drink_placeholder")
var Descrizione_ita = ""
var Descrizione_internazionale = ""
var Prezzo:Double = 0.0
required convenience init(coder decoder: NSCoder) {
self.init()
self.Nome_ita = decoder.decodeObject(forKey: "Nome_ita") as! String
self.Nome_internazionale = decoder.decodeObject(forKey: "Nome_internazionale") as! String
self.Immagine = decoder.decodeObject(forKey: "Immagine") as! UIImage
self.Descrizione_ita = decoder.decodeObject(forKey: "Descrizione_ita") as! String
self.Descrizione_internazionale = decoder.decodeObject(forKey: "Descrizione_internazionale") as! String
self.Prezzo = decoder.decodeObject(forKey: "Prezzo") as! Double
}
func encode(with coder: NSCoder) {
coder.encode(Nome_ita, forKey: "Nome_ita")
coder.encode(Nome_internazionale, forKey: "Nome_internazionale")
coder.encode(Immagine, forKey: "Immagine")
coder.encode(Descrizione_ita, forKey: "Descrizione_ita")
coder.encode(Descrizione_internazionale, forKey: "Descrizione_internazionale")
coder.encode(Prezzo, forKey: "Prezzo")
}
}
然后我有一个方法来决定信息是否可用并从内存中加载它们
private func ScaricaInformazioni(Cosa_scaricare:String){
if let dati = ValoriDefault.data(forKey: Cosa_scaricare),
let ArrayArticoli = NSKeyedUnarchiver.unarchiveObject(with: dati) as? [Oggetto_ordinabile]
{
print("Info disp")
self.CosaVisualizzare = ArrayArticoli
self.Collection_view.reloadData()
}
else{// ancora non sono stati creati i dati
print("Info non disp")
switch Cosa_scaricare {
case "Stuzzichini":
CreaStuzzichiniDefault()
ScaricaInformazioni(Cosa_scaricare: Cosa_scaricare)
break
case "Bevande":
CreaBevandeDefault()
ScaricaInformazioni(Cosa_scaricare: Cosa_scaricare)
break
case "Narghilè":
CreaNarghileDefault()
ScaricaInformazioni(Cosa_scaricare: Cosa_scaricare)
break
default:
break
}
}
}
如果不是这样的话:
let BlackRussian = Oggetto_ordinabile()
BlackRussian.Nome_ita = "Black Russian"
BlackRussian.Nome_internazionale = "Black Russian"
BlackRussian.numero = 9
BlackRussian.Descrizione_internazionale = "Vodka,Kaula"
BlackRussian.Descrizione_ita = "Vodka,Kaula"
let PinaColada = Oggetto_ordinabile()
PinaColada.Nome_internazionale = "Piña Colanda"
PinaColada.Nome_ita = "Piña Colanda"
PinaColada.numero = 10
PinaColada.Descrizione_ita = "Rum Bianco, Succo d'Ananas, Sciroppo di Cocco"
PinaColada.Descrizione_internazionale = "White Rum, Pineapple Juice, Coconout Sirup"
var Drink = [Oggetto_ordinabile]()
Drink.append(Capirina)
Drink.append(JapaneseSliper)
Drink.append(Kir)
Drink.append(ScrewDriver)
Drink.append(AcquaMarina)
Drink.append(TurquoiseBlue)
Drink.append(FrenchKiss)
Drink.append(LongIsland)
Drink.append(BlackRussian)
Drink.append(PinaColada)
let datiCodificati = NSKeyedArchiver.archivedData(withRootObject: Drink)
ValoriDefault.set(datiCodificati, forKey: "Bevande")
return
我得到"致命错误:在打开一个可选值"时意外地发现了nil;随便在init init方法中,为什么?