Objective c 本地存储未在OSX应用程序中持久化(Xcode 4.3)
从我所看到的情况来看,如果您正在构建OSX桌面HTML5应用程序,并且希望在WebView包装中保留localStorage,则需要执行以下操作:Objective c 本地存储未在OSX应用程序中持久化(Xcode 4.3),objective-c,macos,webkit,local-storage,xcode4.3,Objective C,Macos,Webkit,Local Storage,Xcode4.3,从我所看到的情况来看,如果您正在构建OSX桌面HTML5应用程序,并且希望在WebView包装中保留localStorage,则需要执行以下操作: WebPreferences* prefs = [webView preferences]; [prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"]; [prefs setLocalStorageEnabled:YES]; 摘自: 但在Xcode 4.3
WebPreferences* prefs = [webView preferences];
[prefs _setLocalStorageDatabasePath:@"~/Library/Application Support/MyApp"];
[prefs setLocalStorageEnabled:YES];
摘自:
但在Xcode 4.3中,这似乎不适用于我。相反,我得到了
"No visible @interface for 'WebPreferences' declares the selector '_setLocalStorageDatabasePath:'
"No visible @interface for 'WebPreferences' declares the selector 'setLocalStorageEnabled:'
我对目标C非常陌生,可能正在做一些愚蠢的事情,比如不包括一些标题之类的东西
我已经包括了WebKit框架和这两个标题:
#import <WebKit/WebKit.h>
#import <WebKit/WebPreferences.h>
#导入
#进口
奇怪的是,我可以访问prefs的其他方法,例如,[prefs setDefaultFontSize:10]
——但不是我上面列出的两种方法
有什么想法吗?这是在Xcode 4.3中删除的吗?有好消息,也有坏消息;我假设你首先想要坏消息(如果我先用坏消息回答你的问题会更容易) 坏消息 之所以会发生这种情况,唯一的答案是Xcode 4.3不再提供这些方法。你链接到“”的那个问题最近一次被激活是在一年前(接受的答案在2011年初被编辑)。从那时起,Xcode至少有两次更新(可能更多,我只是记不起来了),而且苹果公司想让他们的私有方法保持私有似乎是可行的,因此可以安全地假设他们删除了它们以及对
setLocalStorageEnabled:
的支持
我认为你的问题没有其他答案的原因如下:
WebPreferences
实例上调用的两种方法都不受支持。这不仅仅是私有方法,因此苹果必须修改WebPreferences
类,不仅删除setLocalStorageEnabled:
,而且还删除对私有方法的支持,例如\u setLocalStorageDatabasePath:
。我不知道他们为什么一开始就支持私有方法,但他们肯定会拒绝他们的支持,因为我已经很久没有看到实现私有方法的机会了WebKit
,而不必做一些繁重的工作,不仅要找到私有部分,还要将其放入代码中。即使在经历了这么多繁重的工作之后,你能在代码中得到这些方法的支持,苹果也不太可能对此感到满意,他们可能会从应用商店拒绝你的应用可能有一些解决方案不涉及私有和不受支持的方法,我只是不知道,因为我缺乏使用
WebKit
的经验。与其寻找代码不起作用的原因的答案,我还不如开始寻找代码应该做什么的替代方案。好的,我有一个解决方案。我查看了源代码,注意到他们是如何处理这个问题的
事实证明,我收到的错误消息确实有点道理——我需要先为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新手。我真的不明白为什么需要接口来调用这两个方法(即,当我可以在没有接口的情况下调用其他方法时)。我找到了持久性问题的解决方案。见我的帖子
错误消息说没有对_setLocalStorageDatabasePath进行声明:-但如果调用它,它不会工作。如果你调用它,它可能会工作,那么当苹果发布10.8或10.7.5时,它可能会停止工作。所以很可能您无论如何都不想使用它们。@TomAndersen不,它实际上不会编译。请注意,“setLocalStorageEnabled”方法也不起作用,而且它甚至不是私有方法。您可以调用cocoa中的任何内容:例如,使用NSString aString,然后[aString thisiscallthattwillnotwork];应编译,并在运行时导致崩溃。也许您正在使用不同的编译器设置。有一件事需要检查:如果您编写html5代码(js+html5),然后将其放入您的web视图中,它能工作吗?然后,如果需要,可以将js连接到objective c以放置/获取数据;这是一个调用iOS SDK不再支持的方法的问题,而不是web视图的内容。我想你是对的,它不再受支持。对于PhoneGap,我可能必须使用类似的方法—当程序退出时,将localStorage.db复制到一个安全的位置,并在程序再次启动时恢复。