localStorage wird nicht in der OSX-App gespeichert (Xcode 4.3)

8

Nach dem, was ich gesehen habe, wenn Sie eine OSX-Desktop-HTML5-Anwendung erstellen und localStorage in Ihrem WebView-Wrapper beibehalten möchten, müssen Sie Folgendes tun:

%Vor%

Entnommen aus: Wie aktiviere ich? Lokaler Speicher in meiner WebKit-basierten Anwendung?

Aber das scheint bei Xcode 4.3 nicht zu funktionieren. Stattdessen bekomme ich

%Vor%

Ich bin sehr neu in Objective C und mache wahrscheinlich etwas albernes wie nicht ein paar Header oder so etwas.

Ich habe das WebKit-Framework und beide Header hinzugefügt:

%Vor%

Und was komisch ist, ist, dass ich auf andere Methoden von Prefs zugreifen kann, d. h. [prefs setDefaultFontSize:10] - aber nur nicht die zwei obigen, die ich aufgelistet habe.

Irgendwelche Ideen? Ist das etwas, das in Xcode 4.3 entfernt wurde?

    
asgeo1 15.05.2012, 22:23
quelle

3 Antworten

5

OK, ich habe eine Lösung. Ich sah mir den Quellcode von macgap an und bemerkte, wie sie mit diesem Problem umgingen.

Es stellt sich heraus, dass die Fehlermeldung, die ich bekommen habe, ein wenig sinnvoll ist - ich musste zuerst eine Schnittstelle für WebPreferences deklarieren.

%Vor%

Wie ich schon sagte, ich bin neu in Objective-C. Ich verstehe nicht wirklich, warum die Schnittstelle benötigt wird, um diese beiden Methoden aufzurufen (d. H. Wenn ich die anderen Methoden ohne die Schnittstelle aufrufen kann).

    
asgeo1 26.05.2012, 04:58
quelle
2

Es gibt gute Nachrichten und es gibt schlechte Nachrichten; Ich werde die Annahme machen, dass Sie zuerst die schlechten Nachrichten wollen (es wäre einfacher, wenn ich zuerst Ihre Frage mit den schlechten Nachrichten beantworten würde).

Die schlechten Nachrichten

Die einzige Antwort darauf, warum dies passiert, ist, dass Xcode 4.3 diese Methoden nicht mehr anbietet. Diese Frage, mit der Sie verlinkt sind: "Wie funktioniert es?" Ich aktiviere den lokalen Speicher in meiner WebKit-basierten Anwendung? "war zuletzt vor über einem Jahr aktiv (die angenommene Antwort wurde Anfang 2011 bearbeitet). Seitdem gab es mindestens zwei Updates für Xcode (wahrscheinlich mehr und ich erinnere mich nur nicht daran), und es scheint mir machbar, dass Apple ihre privaten Methoden geheim halten möchte, also kann man davon ausgehen, dass sie sie entfernt haben sowie die Unterstützung für setLocalStorageEnabled: .

Die Gründe dafür, dass ich keine andere Antwort auf Ihr Problem finde, sind die folgenden:

  1. Beide Methoden, die Sie in der WebPreferences -Instanz aufrufen, werden nicht unterstützt. Es ist nicht nur die private Methode, also muss Apple die Klasse WebPreferences modifiziert haben, indem nicht nur setLocalStorageEnabled: entfernt wurde, sondern auch private Methoden wie _setLocalStorageDatabasePath: . Warum sie anfangs private Methoden unterstützt haben, weiß ich nicht, aber sie haben definitiv auf ihre Unterstützung verzichtet, weil ich seit einiger Zeit keine Gelegenheit gesehen habe, eine private Methode zu implementieren.
  2. Wenn die Implementierung der privaten Methode (oder auch der anderen, öffentlichen Methode) möglich wäre, wäre es so einfach, wie es Ihr Code ausmacht. Wenn man sich die verlinkte Frage ansieht, erwähnt sie keine schwierigen Schritte, um den Code zu unterstützen. Es gibt keine Möglichkeit, einen privaten Teil eines Frameworks wie WebKit zu importieren, ohne etwas zu tun, um nicht nur den privaten Teil zu finden, sondern ihn auch in Ihren Code einzubinden. Selbst wenn Sie diese Methoden nach all dem "Heavy-Lifting" in Ihrem Code unterstützen können, wäre es sehr unwahrscheinlich, dass Apple damit sehr zufrieden wäre und Ihre App wahrscheinlich aus dem App Store ablehnen würde.

Entschuldigen Sie, dass ich ein Debbie-Downer bin, aber ich glaube nicht, dass Ihr Code ohne tiefgreifendes Digging und große Problemumgehungen funktionieren würde. Wenn Sie möchten, dass es problemlos funktioniert, müssen Sie wahrscheinlich bis Anfang 2011 zurückgehen und stattdessen Ihre App erstellen.

Die gute Nachricht

Es gibt wahrscheinlich eine Lösung, die nicht mit privaten und nicht unterstützten Methoden verbunden ist, die ich nicht kenne, weil ich nicht genug Erfahrung mit WebKit habe. Anstatt nach einer Antwort zu suchen, warum Ihr Code nicht funktioniert, suche ich nach Alternativen für das, was Ihr Code tun soll.

    
Carter Pape 19.05.2012 13:54
quelle
1

Ich habe eine Lösung für das Persistenzproblem gefunden. Siehe meinen Beitrag unter

Der lokale Speicher in webview ist nicht persistent

    
Derek Wade 09.08.2013 18:24
quelle