8

私が見てきたことから、OSXデスクトップHTML5アプリを構築していて、localStorageをWebViewラッパーに保持したい場合は、次のようなことを行う必要があります。

WebPreferences* prefs = [webView preferences];
[prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];

引用元:WebKitベースのアプリケーションでローカルストレージを有効にするにはどうすればよいですか?

しかし、これはXcode4.3では機能しないようです。代わりに私は得る

"No visible @interface for 'WebPreferences' declares the selector '_setLocalStorageDatabasePath:'
"No visible @interface for 'WebPreferences' declares the selector 'setLocalStorageEnabled:'

私はObjectiveCに非常に慣れていないので、ヘッダーなどを含めないなど、ばかげたことをしていると思います。

WebKitフレームワークとこれらのヘッダーの両方を含めました。

#import <WebKit/WebKit.h>
#import <WebKit/WebPreferences.h>

そして奇妙なのは、他の設定方法にアクセスできることです。つまり[prefs setDefaultFontSize:10]、上記の2つだけではありません。

何か案は?これはXcode4.3で削除されたものですか?

4

3 に答える 3

5

OK、解決策があります。macgapのソースコードを見て、彼らがこの問題にどのように対処しているかに気づきました。

私が受け取ったエラーメッセージは少し意味があることがわかりました-最初に WebPreferences のインターフェースを宣言する必要がありました。

@interface WebPreferences (WebPreferencesPrivate)
- (void)_setLocalStorageDatabasePath:(NSString *)path;
- (void) setLocalStorageEnabled: (BOOL) localStorageEnabled;
@end

...

WebPreferences* prefs = [WebPreferences standardPreferences];
[prefs _setLocalStorageDatabasePath:"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];
[webView setPreferences:prefs];

私が言ったように、私はObjective-Cが初めてです。これら 2 つのメソッドを呼び出すためにインターフェイスが必要な理由がわかりません (つまり、インターフェイスなしで他のメソッドを呼び出すことができる場合)。

于 2012-05-26T04:58:35.117 に答える
2

良いニュースと悪いニュースがあります。私は、あなたが最初に悪いニュースを望んでいると仮定します (とにかく最初に悪いニュースであなたの質問に答えた方が簡単でしょう)。

悪い知らせ

なぜこれが起こっているのかについての唯一の答えは、Xcode 4.3 がそれらのメソッドをもう提供していないということです。「 WebKit ベースのアプリケーションでローカル ストレージを有効にするにはどうすればよいですか? 」というリンク先の質問は、1 年以上前に最後にアクティブでした (受け入れられた回答は 2011 年初頭に編集されています)。それ以来、Xcode には少なくとも 2 つの更新がありました (おそらくそれ以上であり、私はそれらを覚えていません)。Apple がプライベート メソッドを非公開に保ちたいと考えるのは現実的であるように思われるため、それらを削除したと想定しても安全です。のサポートと同様にsetLocalStorageEnabled:

あなたの問題に対する他の答えがないと私が思う理由は次のとおりです。

  1. インスタンスで呼び出す両方のメソッドWebPreferencesはサポートされていません。これはプライベート メソッドだけではないため、Apple はWebPreferencesクラスを変更してsetLocalStorageEnabled:_setLocalStorageDatabasePath:. なぜ彼らが最初からプライベート メソッドをサポートしていたのかはわかりませんが、プライベート メソッドを実装する機会がかなり長い間見られなかったため、サポートを取り締まったことは間違いありません。
  2. プライベート メソッド (または他のパブリック メソッド) の実装が可能である場合、コードが示すのと同じくらい簡単です。リンクされた質問を見ると、コードをサポートするための難しい手順については言及されていません。フレームワークのプライベート パーツをインポートする方法はありません。たとえばWebKit、プライベート パーツを見つけるだけでなく、それをコードに組み込むという手間のかかる作業を行うことはありません。面倒な作業をすべて行った後、これらのメソッドをコードでサポートできるようになったとしても、Apple がそれに満足する可能性はほとんどなく、App Store からアプリを拒否する可能性があります。

すべてについてデビーダウナーになって申し訳ありませんが、深く掘り下げて大規模な回避策を講じなければ、あなたのコードが機能しなくなると思います. 簡単に動作させたい場合は、おそらく 2011 年初頭に戻ってアプリを作成する必要があります。

良いニュース

を使用した経験がないために気付いていない、プライベートでサポートされていないメソッドを含まないソリューションがおそらくいくつかありますWebKit。コードが機能しない理由の答えを探す代わりに、コードが本来行うべきことの代替案を探し始めます。

于 2012-05-19T13:54:14.187 に答える
1

持続性の問題の解決策を見つけました。で私の投稿を参照してください

WebView のローカル ストレージは永続的ではありません

于 2013-08-09T18:24:37.067 に答える