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的想法对我的场景最有效。