2016-01-07 101 views
1

對於ObjC,我還是有點新鮮的,所以請原諒我,如果我的術語關閉。將數據插入自定義對象

我有一個web服務返回在數組以下事件數據:

  • eventName的
  • eventAddress
  • eventCity

在尺寸的web服務陣列變化時間,取決於某一天發生了多少事件。

我的問題是,我需要將此webservice數據自動拉入自定義類(RandomEvent),但我不確定如何完全做到這一點。

我可以手動像這樣做,但由於web服務返回的數組不同的大小,它沒有意義做這樣(見下文):

- (NSArray *)todaysEvents { 
    RandomEvent *event1 = [RandomEvent new]; 
    [event1 setName:eventName[0]]; 
    [event1 setAddress:eventAddress[0]]; 
    [event1 setCity:eventCity[0]]; 

    RandomEvent *event2 = [RandomEvent new]; 
    [event2 setName:eventName[1]]; 
    [event2 setAddress:eventAddress[1]]; 
    [event2 setCity:eventCity[1]]; 

    RandomEvent *event3 = [RandomEvent new]; 
    [event3 setName:eventName[2]]; 
    [event3 setAddress:eventAddress[2]]; 
    [event3 setCity:eventCity[2]]; 

    return @[event1, event2, event3]; 
} 

我知道我將不得不遍歷webservice數組,但是就我所能得到的。將數組值賦給我的自定義類的最佳方法是什麼?任何指導將不勝感激。

回答

0

對於你的代碼:

- (NSArray *)todaysEvents { 
    NSMutableArray *resultArray = [NSMutableArray new]; 
    for (int i = 0; i<eventName.count; i++) { 
     RandomEvent *event = [RandomEvent new]; 
     [event setName:eventName[i]]; 
     [event setAddress:eventAddress[i]]; 
     [event setCity:eventCity[i]]; 
     [resultArray addObject:event]; 
    } 
    return [NSArray arrayWithArray:resultArray]; 
} 

但據我瞭解,你正在試圖解析手動接收JSON爲對象。它可能需要很長時間。嘗試使用這樣的映射框架https://github.com/EasyMapping/EasyMapping

+0

哦。我認爲這是因爲我們在一次回答。感謝downvote btw – shpasta

0

假設eventName eventAddress eventCity具有相同的長度,我們可以很容易地迭代它們。一個可變數組可以用來保存所有創建的對象RandomEvent。請注意,如果其中一個eventAddress或eventCity數組的長度與其他長度不同,那麼也會進行安全檢查。

- (NSArray *)todaysEvents { 
    NSMutableArray *eventsArray = [[NSMutableArray alloc] init]; 
    for (int i = 0; i < eventName.count; i++){ 
     if ((eventAddress.count < i) && (eventCity.count < i)){ 
      RandomEvent *event = [[RandomEvent alloc] init]; 

      [event setName:eventName[i]]; 
      [event setAddress:eventAddress[i]]; 
      [event setCity:eventCity[i]]; 

      [eventsArray addObject:event]; 
     } 
    } 

    return [NSArray arrayWithArray:eventsArray]; 
} 

另一個建議是,儘快爲他們從Web服務讀創建RandomEvent對象。這種方式額外的數組將不必傳遞。

0

這不是特定於編程語言。這是更多的面向對象的問題

是的,你是對的,你將不得不迭代通過結果映射到DTO之間查看模型。這聽起來可能會重複,但解耦DTO和查看模型很重要/有幫助。

從你的示例代碼,它看起來像你有多個數組,eventName,eventAddress等
這是一個很好的做法,有一個響應對象的數組。 所以結構應該是ResponseObjects

的陣列

類ResponseObject @Property eventName的 @Property eventAddress @Property eventCity

****僞代碼****
- (NSArray的*)mapDTOtoViewModel :(NSArray)_responseArray {

//使用initWithCapacity而不是init
NSMutableArray viewModels = [NSMutableArray alloc] initWithCapacity:[_ responseArray count]];

//使用快速枚舉獲得更好的性能
爲(響應*響應在_responseArray){
RandomEvent *事件= [RandomEvent新];
[event setName:response.eventName];
[event setAddress:response.eventAddress];
[event setCity:response.eventCity];

[viewModels addObject:event]; 

}
回報的ViewModels;

}

+0

謝謝大家。這讓我瘋狂。 – dbarrett