2016-07-05 63 views
0

我是Realm的新手。现在我有一个简单的应用程序,可以从api中获取新闻文章。第一个视图控制器显示文章标题列表,第二个视图控制器显示webView中从tableView中选择的文章。从Realm中存储API的数据

我想使用Realm来存储来自API的数据,因此即使没有Internet连接,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

你的问题是什么? – Randy

+0

@Randy可能不使用地幔,或者难以做到没有地幔,以及从那里开始的所有事情。谢谢! – SRMR

+0

@Randy或者我在做什么甚至需要Realm的意义? – SRMR

回答

1

我猜你看到了什么是this article on the Realm website关于集成领域和地幔。

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

你的境界代码在这里看起来是正确的(假设Date已被正确地作为RLMObject的一个子类),所以它会出现你的XML解析代码有问题。 NSXMLParser是一个相当棘手的类,因为它需要您通过委托回调顺序构建XML数据图。

为了解析从API服务的XML(即,它本质上很小,离散的块,NSXMLParser是为可笑的巨大XML数据集设计的),我反而推荐使用另一个XML库通过并处理整个XML集,然后交给您。我之前在发货应用中使用了TBXML,并且有a Ray Wenderlich article讨论了其中的更多应用(当然,在这一点上它已经非常过时)。

如果任何人知道任何更新的XML库的建议,请钟意。:)

+0

很好的答案!谢谢你通过这个几个不同的选项来说我 - – SRMR