我是Realm的新手。现在我有一个简单的应用程序从api中提取新闻文章。第一个视图控制器显示文章标题列表,第二个视图控制器显示从tableView
中的webView
中选择的文章。
我想使用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;
}
答案 0 :(得分:1)
我猜你所看到的是关于整合Realm和Mantle的this article on the Realm website。
绝对没有必要将Realm与任何第三方解析库一起使用。在该文章中,Mantle的观点是更容易将来自REST API的JSON响应转换为模型对象(包括过程中的日期字符串到NSDate
之类的东西),然后可以将其移交给Realm对象
您的Realm代码在这里看起来是正确的(假设Date
已正确地成为RLMObject
的子类),因此您的XML解析代码会出现问题。 NSXMLParser
是一个相当棘手的类,因为它要求您通过委托回调顺序构建XML数据图。
为了解析从API提供的XML(即,它本身就是小的,离散的块。NSXMLParser
是为非常庞大的XML数据集而设计的。),我会改为建议使用另一个XML库,该库经过并处理整个XML集,然后再发送给您。我之前已经在发送应用中使用了TBXML,并且a Ray Wenderlich article讨论了更多这些内容(当然,此时它已经过时了)
如果有其他人知道推荐的更新的XML库,请加入。:)