gpt4 book ai didi

ios - Reskit 对象映射返回具有 nil 属性的模型对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:45:52 25 4
gpt4 key购买 nike

我正在尝试映射 RSS 提要的项目。 RKObjectRequestOperation 返回对象的确切数量,但属性值为 nil。以下是我的代码

 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://graphics8.nytimes.com/images/misc/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"
}];

这解决了我的问题。

关于ios - Reskit 对象映射返回具有 nil 属性的模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com