Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 本地存储未在OSX应用程序中持久化(Xcode 4.3)_Objective C_Macos_Webkit_Local Storage_Xcode4.3 - Fatal编程技术网

Objective c 本地存储未在OSX应用程序中持久化(Xcode 4.3)

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

从我所看到的情况来看,如果您正在构建OSX桌面HTML5应用程序,并且希望在WebView包装中保留localStorage,则需要执行以下操作:

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
    ,而不必做一些繁重的工作,不仅要找到私有部分,还要将其放入代码中。即使在经历了这么多繁重的工作之后,你能在代码中得到这些方法的支持,苹果也不太可能对此感到满意,他们可能会从应用商店拒绝你的应用
  • 很抱歉,我对这一切都感到沮丧,但我只是认为,如果没有深入的挖掘和大量的变通方法,您的代码将无法继续工作。如果你想让它更容易工作,你可能需要回到2011年初,然后再制作你的应用程序

    好消息
    可能有一些解决方案不涉及私有和不受支持的方法,我只是不知道,因为我缺乏使用
    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复制到一个安全的位置,并在程序再次启动时恢复。