2016-05-18 13 views
1

Wie konvertiere ich NSObject in NSDictionary?NSObject in NSDictionary konvertieren

Auf den ersten Schritt i NSDictionary zu NSObject umgewandelt haben wie,

QRCodeData *obj = [[QRCodeData alloc] initWithQRcodeData:myDictonary]; 

QRCodeData.h

@interface QRCodeData : NSObject 
-(instancetype)initWithQRcodeData:(NSDictionary*)dictionary; 
@end 

QRCodeData.m

@implementation QRCodeData 

-(instancetype)initWithQRcodeData:(NSDictionary*)dictionary 
{ 
    self = [super init]; 
    if(self){ 

     self.name = dictionary[@"userName"]; 
     self.phoneNumber = dictionary[@"mobileNo"]; 

    } 
    return self; 

} 
@end 

will ich mein Wörterbuch aus dem Objekt, es ist möglich zu bekommen?

Bitte helfen Sie und Dank im Voraus ..

+0

Speziell [diese Antwort] (http://stackoverflow.com/a/10318659/299924), die davon ausgeht, dass Sie die gleichen Namen für die Eigenschaften Ihres Objekts und die Tasten Ihres Wörterbuchs verwenden, die sich wie eine gute Idee anhören mich. – trojanfoe

+0

Sie wollen Wörterbuch in der gleichen Klasse oder in einer anderen Klasse? –

Antwort

3

Sie einfach zu nennen wie Wörterbuch bekommen,

NSDictionary *dict = @{@"userName": obj.name ,@"mobileNo" : obj.phoneNumber }; 

hier obj ist QRCodeData ‚s-Objekt. Coding (KVC) für diesen Zweck

Hope this wird :)

+0

Was schreibe ich in QRCodeData Klasse? – Krunal

+0

Sie müssen nichts in Ihre 'QRCodeData'-Klasse schreiben. Sie sollten Eigenschaft in .h Datei wie 'name' und' phoneNumber' haben und wenn Sie es im Wörterbuch in einer beliebigen Klasse konvertieren möchten, importieren Sie 'QRCodeData.h' und machen Sie ein Objekt daraus und mit diesem Objekt können Sie wie erwähnt Wörterbuch erstellen in meiner Antwort – Lion

3

Der einfachste Weg ist es, diese Methode in der QRCodeData Klasse hinzuzufügen.

- (NSDictionary *)dictionaryValue 
{ 
    return @{@"userName" : self.name, @"mobileNo" : self.phoneNumber}; 
} 

Wenn userName und phoneNumber könnte nil Sie haben, dass zu überprüfen.

mit

NSDictionary *dict = [obj dictionaryValue]; 
+0

Ich bekomme nil – Krunal

+0

Probieren Sie diese zwei Zeilen QRCodeData * codeData = [[QRCodeData Alloc] initWithQRcodeData: @ {@ "Benutzername": @ "John Doe", @ "mobileNo": @ "1-234-5678"}] ; '' NSLog (@ "% @", [codeData dictionaryValue]); 'Sie sollten dasselbe Wörterbuch erhalten, das im Initialisierer übergeben wurde. – vadian

2

helfen können Sie Key-Wert verwenden. Erstens bieten Klassenmethode für alle Schlüssel, die Sie teilen möchten:

+ (NSSet *)keysToCopy 
{ 
    return [NSSet setWithObjects:@"userName", @"mobileNio", .....]; 
} 

Dann können Sie so etwas wie in der Init-Methode tun:

for (key in [[self class] keysToCopy]) 
{ 
    [self setValue:dictionary[key] forKey:key]; 
} 

und eine andere Methode zur Verfügung stellen, um es zu NSDictionary wieder zurück:

- (NSDictionary *)dictionaryRepresentation 
{ 
    NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
    for (key in [[self class] keysToCopy]) 
    { 
     [result setObject:[self valueForKey:key] forKey:key]; 
    } 
} 

Das einzige Problem bleibt, dass nicht jede Eigenschaft kompatibel zu NSDictionary speichern ist.

Dieser Ansatz ermöglicht es Ihnen, diese Lösung für jedes Cocoa-Objekt zu skalieren, und Sie müssen nichts ändern, außer keysToCopy, falls neue Eigenschaften vorhanden sind.

Verwandte Themen