Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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
Ios UIWebView必须获取localStorage项并以本机方式将其存储在应用程序中/以本机方式检索它_Ios_Objective C_Uiwebview_Local Storage - Fatal编程技术网

Ios UIWebView必须获取localStorage项并以本机方式将其存储在应用程序中/以本机方式检索它

Ios UIWebView必须获取localStorage项并以本机方式将其存储在应用程序中/以本机方式检索它,ios,objective-c,uiwebview,local-storage,Ios,Objective C,Uiwebview,Local Storage,我已经弄清楚了第一部分 - (void)webViewDidFinishLoad:(UIWebView*) myTapView { NSString *jsString = @"localStorage.getItem('username');"; NSString *someKeyValue = [tapView stringByEvaluatingJavaScriptFromString:jsString]; // This is where I would

我已经弄清楚了第一部分

- (void)webViewDidFinishLoad:(UIWebView*) myTapView {
     NSString *jsString = @"localStorage.getItem('username');";
     NSString *someKeyValue = [tapView stringByEvaluatingJavaScriptFromString:jsString];

     // This is where I would start storing it so I can retrieve it later
}
这是我的问题,我需要存储刚从localStorage获得的值,以便再次使用它。问题是我不知道从哪里开始。此代码位于WebView的ViewController中,因此我需要能够在ViewController.m文件的其他区域中使用它


存储信息的最佳方法是什么?我还希望上面的代码能够更新该值,因为它并不总是相同的用户名(人们可以切换帐户)。

在iOS上存储数据有几种方法,但这取决于要存储的值的类型。如果它只是一个普通字符串或其他“轻”数据,最好的方法是将其保存到
NSUserDefaults
。如果它是一个图像或视频,你可能想考虑使用<代码> NKEKED档案> <代码>。否则,如果要构建复杂的数据模型,请使用核心数据

下面是一个很好的例子,详细描述了每种方法的优缺点


根据您的代码,您希望存储一个字符串。在这种情况下,我将使用
NSUserDefaults

使用NSUserDefaults存储UIWebView本地存储值,如下所示

 - (void)webViewDidFinishLoad:(UIWebView*) myTapView {
        NSString *jsString = @"localStorage.getItem('username');";
        NSString *someKeyValue = [myTapView stringByEvaluatingJavaScriptFromString:jsString];

         // Store your Username in iPhone persistence variable and use it later in the application
        NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults];
        [userdefault setObject:someKeyValue forKey:@"username"];
        [userdefault synchronize];

        //use of User default
        NSLog(@"User name %@",[userdefault valueForKey:@"username"]);
    }

如何使用synchronize而不将其放入[userdefault synchronize]?假设我使用的是NSData*data=[NSKeyedArchivedDatawithRootObject:someKeyValue];[[NSUserDefaults standardUserDefaults]设置对象:数据分叉:@“用户名”];您可以直接写入[[NSUserDefaults standardUserDefaults]syncrhonize];这似乎是可行的(使用NSHipster中的NSUserDefaults代码段),但它只起作用一次,如果应用程序再次尝试提取信息并再次设置密钥,它将显示为nothing\没关系,NSHipster的想法对我的场景最有效。