2 Stimmen

Laden (und Anzeigen) einer .XIB aus dem Web

Ich möchte in der Lage sein, (über eine NSURLConnection-Anforderung) eine XIB-Datei herunterzuladen und sie in einer Ansicht anzuzeigen. Ich habe die NSURLConnection implementiert, und sicherlich, wenn die Verbindung abgeschlossen ist, bin ich mit einem NSString von XML-Daten, die die XIB-Datei links. Beispiel: (nur die ersten paar Zeilen von vielen)

<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
    <data>
        <int key="IBDocument.SystemTarget">800</int>
        <string key="IBDocument.SystemVersion">10D573</string>
        <string key="IBDocument.InterfaceBuilderVersion">762</string>
        <string key="IBDocument.AppKitVersion">1038.29</string>
        <string key="IBDocument.HIToolboxVersion">460.00</string>
        ET CETERA...

Ich habe mir die Dokumentation angesehen und glaube, dass ich "initWithNibName:" nicht verwenden kann, weil es aus dem Web abgerufen wird. Ich glaube, ich muss die XIB-Datei im Dokumentverzeichnis der App speichern und dann "loadNibFile:externalNameTable:withZone:" verwenden.

Im Wesentlichen, was ich tun möchte, ist eine iPad-Anwendung, und es gibt ein kleines 320x480-Fenster, wo eine .XIB aus dem Web geladen angezeigt werden kann. Wenn ich es lokal an einen ViewController anhängen kann, umso besser, aber nicht ganz notwendig.

Ich bin nur nicht genau sicher, wie ich verwenden sollte "loadNibFile:externalNameTable:withZone:" Kann jemand mir einen Rat oder ein Beispiel geben?

Vielen Dank im Voraus!

3voto

cduhn Punkte 17688

LoadNibFile:externalNameTable:withZone: ist eine AppKit-Methode, funktioniert also nur auf Mac OS, nicht auf iPhone oder iPad.

In SDK 3.2 können Sie -[UIViewController initWithNibName:bundle:] oder -[NSBundle loadNibNamed:owner:options:] verwenden, je nachdem, ob Sie möchten, dass der Eigentümer der Datei ein UIViewController ist oder nicht. Sie haben zwar Recht, dass Sie keine .xib herunterladen und in die Ressourcen Ihres Haupt-Bundles installieren können, aber Sie können wahrscheinlich ein Bundle herunterladen, es in Ihrem Dokumentenverzeichnis speichern, es an +[NSBundle bundleWithPath:] übergeben und dann eine .xib daraus extrahieren, indem Sie initWithNibName:bundle: oder loadNibNamed:owner:options.

Ich habe das nicht ausprobiert, aber es scheint zu funktionieren. Ich bin gespannt, ob es klappt.

Es würde mich auch sehr interessieren, ob Apple diese App akzeptiert. Es scheint, als würde dies Abschnitt 3.2.2 des iPhone SDK Agreement auf die Probe stellen.

1voto

Brad Larson Punkte 169275

Mit einer einfachen .xib-Datei ist dies nicht möglich, da diese in ein binäres Format kompiliert werden muss, damit sie in einer tatsächlichen Anwendung verwendet werden kann.

Wenn Sie die .xib-Dateien in eine richtige iPhone-.nib-Datei kompilieren, können Sie diese möglicherweise in ein externes Bundle einfügen und dieses Bundle in das Dokumentenverzeichnis der Anwendung herunterladen. Sie könnten dann eine NSBundle-Instanz erstellen mit +bundleWithPath: oder ähnliches, und übergeben Sie den Nib-Namen und das Bundle in die UIViewController's –initWithNibName:bundle: .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X