我如何访问 iOS 项目的 NSUserDefault 以做出原生反应?
Posted
技术标签:
【中文标题】我如何访问 iOS 项目的 NSUserDefault 以做出原生反应?【英文标题】:How i can access NSUserDefault of iOS project in to react native? 【发布时间】:2020-08-27 02:29:05 【问题描述】:我在 ios swift 中创建了一个项目,并在 swift 中创建了几个屏幕,现在我想使用这个屏幕来响应原生,所以我需要访问 swift NSUserDefault 来响应本地持久会话所以我如何使用它请帮助我。
谢谢。
【问题讨论】:
【参考方案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以上是关于我如何访问 iOS 项目的 NSUserDefault 以做出原生反应?的主要内容,如果未能解决你的问题,请参考以下文章
iOS:NSUserDefaults 是不是与 iCloud 同步?
如何从 watchOS App 中的 iOS 文件夹访问课程
将remotebuild与cordova ios一起使用时如何修复丢失的写访问错误?