2016-07-05 8 views
0

Я новичок в Realm. Прямо сейчас у меня есть простое приложение, которое тянет статьи новостей из api. Первый контроллер представления отображает список названий статей, второй контроллер представления отображает изделие, выбранное из tableView, в webView.Хранение данных API в Realm

Я хотел бы использовать 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

Что вы хотите сказать? – Randy

+0

@ Randy это возможно без использования мантии, или это слишком сложно сделать без Мантии, и все, что следует оттуда в основном. Благодаря! – SRMR

+0

@ Рэнди, или если то, что я делаю, даже имеет смысл нуждаться в Царстве? – SRMR

ответ

1

Я предполагаю, что вы видели, было this article on the Realm website об интеграции Realm и мантии.

Совершенно необязательно использовать Realm с любыми сторонними библиотеками разбора. Точка Mantle в этой статье заключалась в том, чтобы упростить преобразование ответа JSON из REST API в объект модели (включая процесс, например, строки даты до NSDate), которые затем могут быть переданы объекту Realm.

Ваш код в реальном времени выглядит корректно (предположим, что Date был сделан соответствующим подклассом RLMObject), поэтому, похоже, что-то не так с вашим XML-синтаксическим кодом. NSXMLParser - довольно сложный класс для работы, поскольку он требует, чтобы вы построили график данных XML последовательно через обратные вызовы делегатов.

Для разбора XML, который подается из API (т. Е. Он по сути был бы небольшим, дискретным блоком. NSXMLParser предназначен для смехотворно огромных наборов данных XML.) Вместо этого я бы рекомендовал использовать другую библиотеку XML, которая идет через и обрабатывает весь набор XML, прежде чем передавать вам. Раньше я использовал TBXML в приложениях для доставки, и есть a Ray Wenderlich article, которые обсуждают больше из них (конечно, на данный момент это довольно устаревшее).

Если кто-либо еще знает о каких-либо более свежих XML-библиотеках, которые рекомендуются, пожалуйста, звоните. :)

+0

Отличный ответ! Спасибо, что поговорили со мной через несколько разных вариантов, – SRMR

Смежные вопросы