2013-05-31 1 views
0

У меня есть приложение iOS с использованием Restkit 0.20.1 вместе с RKXMLReaderSerialization 0.20.0, чтобы вытащить XML-данные с сервера. Код отлично работает, если сервер отправляет мне данные JSON, но теперь, когда я пытаюсь вытащить данные в формате XML, я зашел в тупик. Я все еще получаю данные с сервера, но я получаю сообщение об ошибке, что читает:Не найдено отображаемых значений при использовании RKXMLReaderSerialization

restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: No mappable values found for any of the attributes or relationship mappings 

Я предполагаю, что это означает, что объект картограф не признает какое-либо данные в качестве соответствия моих основных данных атрибутов, так что ничего не отображать. Я установил RKXMLReaderSerialization через cocoapods и зарегистрировал класс в соответствии с документацией. Но, очевидно, я что-то упускаю. Может ли кто-нибудь указать на это?

Вот где я зарегистрировать класс сериализации

// Set the default store shared instance 
    [RKManagedObjectStore setDefaultStore:managedObjectStore]; 

    RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://www.myserver.com"]]; 
    [RKMIMETypeSerialization registerClass:[RKXMLReaderSerialization class] forMIMEType:@"application/xml"]; 

Здесь отображение и дескриптора ответа участок:

RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:@"Gist" inManagedObjectStore:managedObjectStore]; 
    [entityMapping addAttributeMappingsFromDictionary:@{ 
    @"articleId":  @"gistID", 
    @"title":   @"title", 
    @"hashtags":  @"hashtags", 
    @"imageUrl":  @"imageUrl", 
    @"summary":  @"summary"}]; 
    entityMapping.identificationAttributes = @[ @"gistID" ]; 
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping pathPattern:@"/rest/article/getTicker" keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

Здесь применяется часть журнала:

restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: No mappable values found for any of the attributes or relationship mappings 
restkit.network:RKObjectRequestOperation.m:241 GET 'http://www.myserver.com/rest/article/getTicker?ip=255.255.255.0' (200 OK/0 objects) [request=0.2420s mapping=0.0151s total=0.2737s]: 
    response.headers={ 
     Connection = "Keep-Alive"; 
     "Content-Type" = "application/xml"; 
     Date = "Fri, 31 May 2013 04:30:50 GMT"; 
     "Keep-Alive" = "timeout=5, max=100"; 
     "Transfer-Encoding" = Identity; 
    } 
    response.body=<?xml version="1.0" encoding="UTF-8" standalone="yes"?><tickers><ticker><articleId>7587</articleId><authorId>10</authorId><authorName>AFP </authorName><city>Kabul</city><copyrightLine>Copyright 2012 AFP</copyrightLine><countryCode>US</countryCode><countryName>AF</countryName><hashTags>#Afghanistan #unrest #art #offbeat </hashTags><imageUrl>http://www.mywebsite.com/services/images/AFP/photo_1369471279196-2-2.jpg</imageUrl><latitude>34.52813</latitude><longitude>69.17233</longitude> 

Как вы видите, тело ответа приходит как XML с основными атрибутами данных I am l ooke для (articleId, title, hashtags, ...), но он не должен запускать тело через xmlreader .... Я довольно новичок в iOS и Objective-C, поэтому любая помощь оценивается, а фрагменты стоят их веса в золоте!
Благодаря

Update ... Вот как XML приходит от сервера

<?xml version="1.0" encoding="UTF-8"?> 
<tickers> 
    <ticker> 
     <articleId>7587</articleId> 
     <authorId>10</authorId> 
     <authorName>AFP </authorName> 
     <city>Kabul</city> 
     <copyrightLine>Copyright 2012 AFP</copyrightLine> 
     <countryCode>US</countryCode> 
     <countryName>AF</countryName> 
     <hashTags>#Afghanistan #unrest #art #offbeat </hashTags> 
     <imageUrl>http://www.mywebsite.com/services/images/AFP/photo_1369471279196-2-2.jpg</imageUrl> 
     <latitude>34.52813</latitude> 
     <longitude>69.17233</longitude> 
     <title>Day after Kabul attacks, 10,000 peace balloons</title> 
     <totComments>0</totComments> 
     <totDislikes>0</totDislikes> 
     <totInappropriate>0</totInappropriate> 
     <totLikes>0</totLikes> 
     <totViews>0</totViews> 
    </ticker> 

UPDATE # 2 .... Вот разница в том, как отображается ответ когда я получаю XML и получаю JSON с сервера.

Сериализация

tickers =  { 
    ticker =   (
        { 
      articleId =     { 
       text = 7587; 
      }; 
      authorId =     { 
       text = 10; 
      }; 
      authorName =     { 
       text = AFP; 
      }; 
      city =     { 
       text = Kabul; 
      }; 
      copyrightLine =     { 
       text = "Copyright 2012 AFP"; 
      }; 
      .....Goes on like this for each attribute 

JSON напрямую с сервера

{ 
    articleId = 7587; 
    authorId = 10; 
    authorName = "AFP "; 
    city = Kabul; 
    copyrightLine = "Copyright 2012 AFP"; 
    countryCode = US; 
    countryName = AF; 
    hashTags = "#Afghanistan #unrest #art #offbeat "; 
    imageUrl = "http://www.mywebsite.com/services/images/AFP/photo_1369471279196-2-2.jpg"; 
    latitude = "34.52813"; 
    longitude = "69.17233"; 
    title = "Day after Kabul attacks, 10,000 peace balloons"; 
    totComments = 0; 
    totDislikes = 0; 
    totInappropriate = 0; 
    totLikes = 0; 
    totViews = 0; 
}, 

Кто-нибудь есть идея, как решить эту проблему?

ответ

1

Я думаю, что сериализация, вероятно, прекрасна. Я думаю, проблема заключается в том, что для сопоставления недостаточно информации для навигации по XML (который, как я полагаю, имеет больше тегов, чем соответствующий JSON).

Попробуйте сказать дескриптору ответа ключевого пути расположения данных в XML:

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entityMapping pathPattern:@"/rest/article/getTicker" keyPath:@"tickers.ticker" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

Update: это ваше отображение должно быть:

[entityMapping addAttributeMappingsFromDictionary:@{ 
@"articleId.text":  @"gistID", 
@"title.text":   @"title", 
@"hashtags.text":  @"hashtags", 
@"imageUrl.text":  @"imageUrl", 
@"summary.text":  @"summary"}]; 
+0

Вайна, Это, безусловно, получает меня где-то. С вашим предложением консоль теперь читает [NSDictionaryM length]: непризнанный селектор, отправленный экземпляру ... – Ben

+0

Когда это распечатывается? – Wain

+0

Только что понял. Это происходило, когда код пытался загрузить строку для imageUrl в URL-адрес.Я прокомментировал это и добавил некоторые протоколирования, и похоже, что отображение все еще неверно. Я получаю 10 отдельных articleID, но счет показывает только 1. Также, когда я регистрирую строку, полученную из «title», текст не приписывается. Вы определенно получаете галочку за свой ответ. Мне просто нужно еще кое-что сделать! – Ben