【问题标题】:How i can access NSUserDefault of iOS project in to react native?我如何访问 iOS 项目的 NSUserDefault 以做出原生反应?
【发布时间】:2020-08-27 02:29:05
【问题描述】:

我在 iOS swift 中创建了一个项目,并在 swift 中创建了几个屏幕,现在我想使用这个屏幕来响应原生,所以我需要访问 swift NSUserDefault 来响应本地持久会话所以我如何使用它请帮助我。

谢谢。

【问题讨论】:

    标签: ios swift react-native


    【解决方案1】:

    最简单的方法是在 XCode 项目中添加下一个文件,在 objc 中创建一个小的原生模块(因为 ReactNative SDK 是 objc 代码):

    RNUserDefaults.h

    #import <React/RCTBridgeModule.h>
    
    @interface RNUserDefaults : NSObject <RCTBridgeModule>
    @end
    

    RNUserDefaults.m

    #import "RNUserDefaults.h"
    
    @implementation RNUserDefaults
    
    RCT_EXPORT_MODULE(UserDefaults)
    
    RCT_EXPORT_METHOD(set:(NSString*)key value:(id)value) {
        [NSUserDefaults.standardUserDefaults setObject:value forKey:key];
    }
    
    RCT_EXPORT_METHOD(get:(NSString*)key callback:(RCTResponseSenderBlock)callback) {
        id value = [NSUserDefaults.standardUserDefaults objectForKey:key];
        callback(@[value]);
    }
    
    @end
    
    

    在 Swift 中实现本机模块要困难得多,因为您还应该将 .h 和 .m 文件添加到重新映射 (RCT_EXTERN_REMAP_MODULE) 到带有外部声明 (RCT_EXTERN_METHOD) 的 swift。

    使用方法:

    import {
        ...
        NativeModules,
    } from 'react-native';
    
    ...
    
    NativeModules.UserDefaults.set('userId', 1234);
    NativeModules.UserDefaults.get('userId', value => {
        alert(value); // Shows 1234
    });
    

    【讨论】:

      【解决方案2】:

      您可以像这样将数据存储在持久存储中。

      这里是示例 sn-p。

      AsyncStorage.setItem('loggedIn', true);
      

      在你的 app.js 中你可以在构造函数中检查这个标志

      AsyncStorage.getItem('loggedIn').then((value) => {
              if (value) {
                 //user logged in logic goes here
              } else {
               // user logged out. You need to login him again
              }
           });
      

      【讨论】:

      • 我已经在 iOS swift 中使用 NSUserDefault 设置了项目,但我想在 React Native 中访问这个保存的 NSUserDefault 值。
      • 试试AsyncStorage.getItem这个东西
      • 它给了我 Null
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2020-04-09
      • 2019-10-24
      相关资源
      最近更新 更多