gpt4 book ai didi

ios - 在 Realm 中存储来自 API 的数据

转载 作者:行者123 更新时间:2023-11-29 00:50:12 25 4
gpt4 key购买 nike

我是 Realm 的新手。现在我有一个简单的应用程序,可以从 api 中提取新闻文章。第一个 View Controller 显示文章标题列表,第二个 View Controller 显示从 webView 中的 tableView 中选择的文章。

我想使用 Realm 来存储来自 API 的数据,因此即使没有互联网连接,tableView 也会显示结果。

我看到使用 Mantle 的教程,但我正在尝试不使用它。

这是我迄今为止尝试过的方法,但是我对 valueForKey 的使用导致应用程序崩溃,所以我将其注释掉了。

- (void)startParsing
{
NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://images.apple.com/main/rss/hotnews/hotnews.rss#sthash.TyhRD7Zy.dpuf"]];
[xmlparser setDelegate:self];
[xmlparser parse];
if (_marrXMLDataCollection.count != 0) {

Data *dataRealm = [[Data alloc] init];
dataRealm.titleR = @"Temporary title";
// dataRealm.titleR = [_marrXMLDataCollection valueForKey:@"title"];

RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addObject:dataRealm];
[realm commitWriteTransaction];

[self.collectionView reloadData];
}
}

任何想法都会很棒,谢谢!

如果需要,这里有更多信息:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
{
if ([elementName isEqualToString:@"rss"]) {
_marrXMLDataCollection = [[NSMutableArray alloc] init];
}
if ([elementName isEqualToString:@"item"]) {
_mdictXMLPartCollection = [[NSMutableDictionary alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
{
if (!_mstrXMLStringCollection) {
_mstrXMLStringCollection = [[NSMutableString alloc] initWithString:string];
}
else {
[_mstrXMLStringCollection appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
{
if ([elementName isEqualToString:@"title"]
|| [elementName isEqualToString:@"pubDate"]
|| [elementName isEqualToString:@"link"]

) {
[_mdictXMLPartCollection setObject:_mstrXMLStringCollection forKey:elementName];
}
if ([elementName isEqualToString:@"item"]) {
[_marrXMLDataCollection addObject:_mdictXMLPartCollection];
}
_mstrXMLStringCollection = nil;
}

最佳答案

我猜你看到的是 this article on the Realm website关于整合 Realm 和 Mantle。

绝对没有必要将 Realm 与任何第三方解析库一起使用。那篇文章中 Mantle 的要点是更容易将来自 REST API 的 JSON 响应转换为模型对象(包括过程中的日期字符串到 NSDate 之类的东西),然后可以移交到 Realm 对象。

您的 Realm 代码在这里看起来是正确的(假设 Date 已正确地成为 RLMObject 的子类),所以看起来您的 XML 解析代码有问题. NSXMLParser 是一个使用起来相当棘手的类,因为它需要您通过委托(delegate)回调按顺序构建 XML 数据图。

为了解析从 API 提供的 XML(即,它本质上是小的、离散的 block 。NSXMLParser 是为非常大的 XML 数据集设计的。),我建议改为使用另一个 XML 库,它在交给您之前遍历并处理整个 XML 集。我用过 TBXML在之前发布的应用程序中,有 a Ray Wenderlich article讨论了其中的更多内容(诚然,在这一点上它已经过时了)。

如果其他人知道推荐的任何更新的 XML 库,请插话。:)

关于ios - 在 Realm 中存储来自 API 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38207257/

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