2016-07-27 11 views
-1

Ich versuche, Daten zwischen 2 Geräten mit Bluetooth zu übertragen. Ich möchte benutzerdefiniertes NSObject in NSData konvertieren.Benutzerdefinierte NSObject in NSData konvertieren

Was ist der beste Weg, die empfangenen NSData in ein benutzerdefiniertes NSObject zu dekodieren?

Danke!

+0

Sie können Ihre Klasse NSCoding kompatibel und verwenden Sie die 'NSKeyedArchiver' oder eine Übersetzung in eine JSON (und erstellen Sie eine' initWithJSON machen: 'Gewohnheit init) usw. – Larme

Antwort

3

Sie müssen NSCoding verwenden. NSCoding ist ein einfaches Protokoll mit zwei Methoden: initWithCoder: und encodeWithCoder:. Klassen, die NSCoding entsprechen, können in Daten serialisiert und deserialisiert werden, die entweder auf der Festplatte archiviert oder über ein Netzwerk verteilt werden können.

NSCoding/NSKeyed​Archiver. Hier ist das Tutorial von NSCoding.

Archivierung

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourClass];

dearchivieren

YourClass *objYourClass = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Sie auch meine answer verweisen. Zuerst müssen Sie die Bean-Klasse erstellen und initWithCoder: und encodeWithCoder: implementieren, danach können Sie das Objekt NSData vom Bean-Klassenobjekt und vom Unarchive-Bean-Klassenobjekt von NSData archivieren.

0

Meine sehr einfache Antwort

Zuerst müssen wir die encodeWithCoder und initWithCoder in NSObject.m implementieren und vor, dass ich 2 Daten (Benutzername und Passwort) haben in NSObject Class.For Beispiel stelle ich this.You verstehen

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:@"Dev" forKey:@"username"]; 
    [encoder encodeObject:@"[email protected]" forKey:@"password"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    if((self = [super init])) 
    { 
    //decode properties, other class vars 
    userName = [decoder decodeObjectForKey:@"username"]; 
    passWord = [decoder decodeObjectForKey:@"password"]; 
    } 
    return self; 
} 

Dann in ViewController.m

Für Speichern

NSObjectClass *className = [[NSObjectClass alloc]init]; 
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:className]; 
[currentDefaults setObject:data forKey:@"DATA"]; 
[currentDefaults synchronize]; 

Für Abrufen

NSData *data = [currentDefaults objectForKey:@"DATA"]; 
className = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

für mehr Details Meine Gehen Sie durch ANSWER

Verwandte Themen