【问题标题】:UIWebView must get localStorage item and store it in the app natively / retrive it nativelyUIWebView 必须获取 localStorage 项目并将其本地存储在应用程序中/本地检索它
【发布时间】:2014-01-24 18:31:09
【问题描述】:

我已经弄清楚了第一部分......

- (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 objective-c uiwebview local-storage


    【解决方案1】:

    有几种方法可以在 iOS 上存储数据,但这取决于您要存储什么样的值。如果它只是一个普通字符串或其他“轻”数据,最好的方法是将其保存到NSUserDefaults。如果是图片或视频,您可能需要考虑使用NSKeyedArchiver 将其存档。否则,如果您想构建复杂的数据模型,请使用 Core Data。

    这是一个很好的post on NSHipster,详细描述了每种方法的优缺点。

    根据您的代码,您想要存储一个字符串。在这种情况下,我会选择NSUserDefaults

    【讨论】:

    • 这似乎有效(使用来自 NSHipster 的 NSUserDefaults sn-p),但它只有效一次,如果应用程序尝试再次提取信息并再次设置密钥,它显示为空。 :\
    • 没关系,NSHipster 的想法最适合我的场景。
    【解决方案2】:

    使用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"]);
        }
    

    【讨论】:

    • 如何使用同步而不将其放入 [userdefault syncrhonize]; ?假设我正在使用 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:someKeyValue]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"username"];
    • 可以直接写[[NSUserDefaults standardUserDefaults]syncrhonize];
    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-12-12
    • 2012-05-05
    相关资源
    最近更新 更多