Restkit 0.20.1 と RKXMLReaderSerialization 0.20.0 を使用してサーバーから xml 形式のデータをプルする iOS アプリがあります。サーバーがJSONデータを送信した場合、コードはうまく機能しますが、XML形式でデータを取得しようとしているので、行き止まりになりました。まだサーバーからデータを受信していますが、次のエラーが表示されます。
restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: No mappable values found for any of the attributes or relationship mappings
これは、オブジェクト マッパーがどのデータもコア データ属性に一致するものとして認識しないため、マップするものが何もないことを意味すると想定しています。cocoapods 経由で RKXMLReaderSerialization をインストールし、ドキュメントに従ってクラスを登録しました。しかし、明らかに私は何かが欠けています。誰でも指摘できますか?
ここで、シリアル化クラスを登録します
// 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>
ご覧のとおり、応答本文は、探しているコア データ属性 (articleId、title、ハッシュタグなど) を含む XML として受信されますが、xmlreader を介して本文を実行してはなりません。 iOS と Objective-C は初めてなので、どんな助けも大歓迎です。スニペットは金の重みに値します!
ありがとう
更新... 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>
更新 #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;
},
これに対処する方法を知っている人はいますか?