2016-03-29 14 views
0

Ich habe eine schnelle Klasse in mein Ziel-C-Projekt integriert und es gibt mir ein Objekt, das ich zugreifen und verwenden kann. Ich habe versucht (in einer obj-c-Datei) eine Eigenschaft mit diesem Objekt zu erstellen und zu kodieren/dekodieren mit StandardmethodenSwift-Objekt in Objective-c-Projekt codieren

- (void)encodeWithCoder:(NSCoder *)encoder 

und

- (id)initWithCoder:(NSCoder *)decoder 

Aber meine Anwendung abstürzt für „Unbekannten Selektor an Instanz XXX gesendet ".

Ich glaube, ich kann nicht schnell Objekte auf diese direkte Weise serialisieren, und ich weiß nicht, wie ich jetzt lösen soll. Vielen Dank für Ihre Hilfe

+1

Bitte können Sie Ihre Klasse schreiben (mehr Code), um den Fehler zu erkennen? – Diego

+0

Ich weiß nicht, welchen Code geschrieben werden soll, ich versuche das swift-Objekt wie üblich zu serialisieren. [Encode encodeObject: self.OBAds forKey: @ "OBAds"]; – user3801885

+0

Es scheint mir, dass das OBAds-Objekt NSCoder nicht implementiert – Dzamir

Antwort

0

Dies ist eine einfache Klasse schnell. Sie können dies als Beispiel nehmen. Ich hoffe wir können dir helfen.

class UserBean:NSObject,NSCoding { 

    var idUser:NSNumber? 
    var username:String? 
    var password:String? 
    var email:String? 
    var token:String? 
    var fonte:String? 
    var idFacebook:String? 
    var uuid:String? 
    var profilo = UserProfileBean() 

    override init() { 
     super.init() 
     self.profilo = UserProfileBean() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     idUser  = aDecoder.decodeObjectForKey("idUser") as? NSNumber 
     username = aDecoder.decodeObjectForKey("username") as? String 
     password = aDecoder.decodeObjectForKey("password") as? String 
     email  = aDecoder.decodeObjectForKey("email") as? String 
     token  = aDecoder.decodeObjectForKey("token") as? String 
     fonte  = aDecoder.decodeObjectForKey("fonte") as? String 
     idFacebook = aDecoder.decodeObjectForKey("idFacebook") as? String 
     uuid  = (aDecoder.decodeObjectForKey("uuid") as? String)! 
     profilo  = (aDecoder.decodeObjectForKey("profilo") as? UserProfileBean)! 

    } 
    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeObject(idUser,  forKey: "idUser") 
     aCoder.encodeObject(username, forKey: "username") 
     aCoder.encodeObject(password, forKey: "password") 
     aCoder.encodeObject(email,  forKey: "email") 
     aCoder.encodeObject(token,  forKey: "token") 
     aCoder.encodeObject(fonte,  forKey: "fonte") 
     aCoder.encodeObject(idFacebook ,forKey: "idFacebook") 
     aCoder.encodeObject(uuid ,forKey: "idFacebook") 
     aCoder.encodeObject(profilo,forKey: "profilo") 

    } 
    } 
1

Damit dies funktioniert muss:

a)

-oder

b) den Satz von encodeWithCoder Methoden in Swift Klasse schreiben vererben von einer Obj-C-Klasse, die

(b) verursacht mich Verwirrung, bis die einfache Wahrheit klar wurde: Swift Objekte tun nicht von NSObject abstammen, so viele der Maschinen, die Sie erwarten einfach nicht dort, und das beinhaltet das gesamte coder System. Ziemlich viel Funktionalität ist verfügbar, wenn Sie ändern:

class myClass { 

zu

class myClass: NSObject {