2016-07-06 16 views
1

Ich habe eine Sammlungsansicht, die die Ergebnisse eines XML-Feeds zeigt. Es funktioniert gut, aber ich muss die Ergebnisse des XML-Feeds lokal speichern (wenn keine Internetverbindung verfügbar ist).Aufzählung über Elemente im XML-Feed

Ich weiß, wie man den rohen Feed lokal speichert, aber ich denke, was ich wirklich tun muss, ist Iteration durch die Elemente im XML-Feed und Speichern jeder als NSData Artikel.

Ist das der richtige Weg, darüber nachzudenken, oder haben Sie nützliche Ratschläge oder Tipps?

- (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) { 
     // Save XML to NSData items in background? 

     [self.collectionView reloadData]; 
    } 
} 

Hier ist ein Beispiel dafür, was das Futter aussieht, und ich habe das auch in dem Verzeichnis Dokumente als localdata.plist gespeichert:

(
     { 
     link = "\nhttp://www.apple.com/pr/library/2016/04/26Apple-Reports-Second-Quarter-Results.html?sr=hotnews.rss"; 
     pubDate = "\nTue, 26 Apr 2016 14:44:21 PDT"; 
     title = "\nApple Reports Second Quarter Results"; 
    }, 
     { 
     link = "\nhttp://www.apple.com/final-cut-pro/in-action/trim-editing/?sr=hotnews.rss"; 
     pubDate = "\nWed, 20 Apr 2016 10:05:59 PDT"; 
     title = "\n\nFinal Cut Pro X helps small company delight world\U2019s biggest clients"; 
    }, 
     { 
     link = "\nhttp://www.apple.com/ipad-pro/?sr=hotnews.rss"; 
     pubDate = "\nMon, 21 Mar 2016 12:00:03 PDT"; 
     title = "\n\nApple Introduces 9.7-inch iPad Pro"; 
    }, 
     { 
     link = "\nhttp://www.apple.com/iphone-se/?sr=hotnews.rss"; 
     pubDate = "\nMon, 21 Mar 2016 11:58:09 PDT"; 
     title = "\n\nApple Introduces iPhone SE \U2014 the Most Powerful Phone with a 4-inch Display"; 
    }, 
+0

Warum nicht einfach das XML speichern? – Wain

+0

@Wain Sie sagen, speichern Sie das XML in einer Eigenschaftsliste oder etwas anderes? In diesem Fall war ich mir nicht sicher, wie gut das funktionieren würde, weil es am Ende auch Fotos im Feed geben würde und ich diese stattdessen in NSData-Items umwandeln müsste/zusätzlich richtig? – SRMR

+0

Wie wären die Fotos im XML? base64-codierte Zeichenfolgen? – Wain

Antwort

1

Sie können nur die XML-Daten direkt in einer Datei speichern, entweder als Binärdaten oder als Text. Sie müssen es nicht entpacken und zu nichts konvertieren. Später können Sie dann die Geldbuße laden und Ihren Analysecode erneut ausführen. Dies ist die geringste Codeoption. Es ist mehr Laufzeit teuer, aber wenn Ihre XML-Datei ziemlich groß ist, werden Sie den Unterschied nicht bemerken.

Wenn Sie den verarbeiteten Inhalt speichern möchten, sollte Ihr XML in ein Array von Modellobjekten umgewandelt werden, und Sie können NSCoding für diese Modellobjekte implementieren, um sie auf dem Datenträger zu archivieren. Dies sollte mehr Laufzeit effizient sein, ist aber auch mehr Code.

+0

Super. Ich gebe dir die Belohnung in 11 Stunden, wenn es mich lässt. – SRMR

+0

Kann ich Ihnen eine kurze Frage stellen, wenn die Fotos keine Base64-codierten Strings wären, wäre die Lösung viel anders? – SRMR

+0

In diesem Fall enthält der Feed beispielsweise Links zum Herunterladen der Bilder, sodass der XML-Feed nicht das eigentliche Bild enthält. Als solches würde es Ihren Speicherplatz in beiden Fällen nicht stark verändern, abhängig davon, wann Sie die Bilder herunterladen. Sie würden wahrscheinlich ein separates Image-Caching-System verwenden und es von der XML-Datei fernhalten. – Wain