2016-05-18 78 views
1

如何將NSObject轉換爲NSDictionary?將NSObject轉換爲NSDictionary

在第一步我已經轉換到NSDictionary的NSObject的喜歡,

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 

我希望我的字典從對象時,它有可能得到?

請在此先感謝幫助和..

+0

特別是[這個答案](http://stackoverflow.com/a/10318659/299924),它假設你使用相同的名稱爲你的對象的屬性和你的字典的鍵,這聽起來像個好主意我。 – trojanfoe

+0

你想要在同一個班級或其他班級的詞典? –

回答

3

打電話,你可以簡單地得到字典一樣,

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

這裏objQRCodeData的對象。

希望這將有助於:)

+0

我在QRCodeData類中寫什麼? – Krunal

+0

你不需要在你的'QRCodeData'類中寫任何東西。你應該擁有.h文件中的屬性,比如'name'和'phoneNumber',並且當你想在任何類的字典中將它轉換時,只需導入QRCodeData.h'並將其作爲對象並通過該對象就可以製作字典在我的答案中 – Lion

3

最簡單方法是在QRCodeData類中添加這個方法。

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

如果userNamephoneNumber可能是nil你必須檢查。

要與

NSDictionary *dict = [obj dictionaryValue]; 
+0

我得到零 – Krunal

+0

嘗試這兩行'QRCodeData * codeData = [[QRCodeData alloc] initWithQRcodeData:@ {@「userName」:@「John Doe」,@「mobileNo」:@「1-234-5678」}] ;''NSLog(@「%@」,[codeData dictionaryValue]);'你應該獲得與初始化器中傳遞的字典相同的字典。 – vadian

2

您可以使用鍵 - 值編碼(KVC)用於這一目的。

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

然後你就可以在你的init方法做這樣的事情:

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

,並提供了另一種方法來將其恢復爲NSDictionary:首先,你要分享的所有密鑰提供類方法

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

唯一的問題是,並非每個屬性都與NSDictionary存儲兼容。

此方法允許您將此解決方案擴展到任何Cocoa對象,並且在需要共享新屬性的情況下,它不需要您更改任何內容,只需要更改keysToCopy方法。