2013-10-30 17 views

回答

0

有一些支持從XML生成對象圖的編組框架,但是我會簡單地進行以下操作:

  • 調用服務端點。我最喜歡的圖書館是BBHTTP,但是你可以使用AFNetworking,NSURLConnection和gcd或任何你喜歡的異步網絡調用。
  • 提取XML有效載荷的相關內容在使用RaptureXML

我推薦用例具體有效載荷的對象,因爲它們模型需要什麼對於一個給定的用例具體有效載荷對象服務調用 - 支持契約優先開發的概念。這使您可以在不影響與外部系統集成的情況下更改內部模型。同樣,外部API可以改變而不影響你的模型。

您可以在RXMLElement上創建一個類別方法,以返回映射到用例特定對象的元素。典型的映射通常只需要幾行代碼就可以從線格式編組到您的有效載荷對象進行服務調用。

下面是一個示例(我從中獲取的代碼要求將有效內容包裝在SOAP信封中 - 只是忽略該位)。

- (void)request:(MyUseCaseRequstPayload*)request onComplete:(void (^)(MyResponsePayload*))onSuccess 
     onError:(void (^)(NSError*))onError; 
{ 
    //Even more XML! You can stick your payload inside an envelope if you want 
    SoapEnvelope* envelope = [SoapEnvelope envelopeWithContent:[request xmlString]]; 

    [[BBHTTPRequest postToURL:_serviceUrl data:[envelope data] contentType:@"text/xml"] execute:^(BBHTTPResponse* response) 
    { 
     RXMLElement* element = [RXMLElement elementFromXMLData:[response content]]; 
     MyResponsePayload* response = [[element child:@"elementToBeMapped"] asMyObjectType]; 
     if (onSuccess) 
     { 
      onSuccess(response); 
     } 

    } error:^(NSError* error) 
    { 
     LogDebug(@"Got error: %@", error); 
     if (onError) 
     { 
      onError(error); 
     } 
    }]; 
}