2016-05-24 25 views
-1

我可以寫在一行中最後三行代碼:替代語法FO分配JSON數據objectForKey類的屬性

NSArray* latestLoans = [self.JsonData objectForKey:@"loans"]; 
for (id object in latestLoans) { 
NSDictionary* loan = object; 
newModelClass.name = [loan objectForKey:@"name"]; 
newModelClass.sector = [loan objectForKey:@"sector"]; 
newModelClass.activity = [loan objectForKey:@"activity"]; 

我的完整代碼是在這裏,如果有任何其他的最佳實踐,請建議我。

-(void)CopyOnlineData:(NSDictionary*)OnlineData{ 
self.JsonData = OnlineData; 
NSArray* latestLoans = [self.JsonData objectForKey:@"loans"]; 
for (id object in latestLoans) { 
NewModelClass *newModelClass = [[NewModelClass alloc] init]; 
NSDictionary* loan = object; 
newModelClass.name = [loan objectForKey:@"name"]; 
newModelClass.sector = [loan objectForKey:@"sector"]; 
newModelClass.activity = [loan objectForKey:@"activity"]; 
NSDictionary *loactionDictionary = loan[@"location"]; 
newModelClass.country = loactionDictionary[@"country_code"]; 
newModelClass.town = loactionDictionary[@"town"]; 
NSDictionary *imageid = loan[@"image"]; 
newModelClass.ImageId = imageid[@"id"]; 
NSLog(@"name: %@ \n town: %@\n sector: %@\n country: %@\n activity: %@\n image id: %@", newModelClass.name,newModelClass.town,newModelClass.sector,newModelClass.country,newModelClass.activity,newModelClass.ImageId); 
[self.tableData addObject:newModelClass]; 
} 
[[self KivaTableView]reloadData]; 
} 

謝謝

+0

號爲什麼你想要?你的'Return'鍵是否打破? – trojanfoe

+0

不是,但是你可以通過創建一個採用JSON字典的初始化程序來處理'loan'反序列化:'NewModelClass * newModelClass = [[NewModelCalss alloc] initWithJSONDict:object]; [self.tableData addObject:newModelClass];'這樣,如果其他地方有一個從字典中創建的'NewModelClass'對象,就準備好了。 – Larme

+0

@Larme,謝謝 –

回答

0

繼承人我會做什麼:
爲了從這部分代碼中刪除它創建NewModelClass自定義的初始化。這樣,如果您必須創建NewModelClass的新對象,則不必重寫所有行。

NewModelClass.h

-(id)initWithJSONDict:(NSDictionary *)dict; 

NewModelClass.m

-(id)initWithJSONDict:(NSDictionary *)dict 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.name = [dict objectForKey:@"name"]; 
     self.sector = [dict objectForKey:@"sector"]; 
     self.activity = [dict objectForKey:@"activity"]; 
     NSDictionary *loactionDictionary = dict[@"location"]; 
     self.country = loactionDictionary[@"country_code"]; //or dict[@"location][@"country_code"]; 
     self.town = loactionDictionary[@"town"];//or dict[@"location][@"town"]; 
     NSDictionary *imageid = dict[@"image"]; 
     self.ImageId = imageid[@"id"];//or dict[@"image][@"id"]; 
    } 
    return self; 
} 

我重寫description太:

-(NSString *)description 
{ 
    return [NSString stringWithFormat:@"<%@ %p>: name: %@ \n town: %@\n sector: %@\n country: %@\n activity: %@\n image id:", [self class], self, self.name, self.town, self.sector, self.country, self.activity, self.ImageId ]; 
} 

然後在你的代碼:

-(void)addOnlineData:(NSDictionary*)onlineData 
{ 
    self.JsonData = onlineData; 
    NSArray* latestLoans = [self.JsonData objectForKey:@"loans"]; 
    for (NSDictionary *aLoan in latestLoans) 
    { 
     NewModelClass *newModelClass = [[NewModelClass alloc] initWithJSONDict:aLoan]; 
     NSLog(@"Loan: %@", loan); 
     [self.tableData addObject:newModelClass]; 
    } 
    [[self KivaTableView]reloadData]; 
} 

的for循環修改,因爲你已經知道這是一個NSDictionary,所以沒有用的for id,然後id投地NSDictionary

修改方法名稱:
以小寫字母開頭的方法。
如果您不做副本,請避免以「複製」開始。

注意:此代碼未經過測試,由於輕微的語法錯誤可能無法編譯,但您應該瞭解主要想法。