我如何使用本机 swift 代码中的 react 本机 RCNAsyncStorage 模块
Posted
技术标签:
【中文标题】我如何使用本机 swift 代码中的 react 本机 RCNAsyncStorage 模块【英文标题】:How do i use react native RCNAsyncStorage module from native swift code 【发布时间】:2019-05-13 12:23:57 【问题描述】:我有一个 react 本机应用程序,我在其中使用 RNCAsyncStorage
npm 模块进行简单的数据持久性。然而,我的ios
版本的应用附带了一个共享扩展,而这个共享扩展需要访问我存储的数据字符串之一。
简而言之,我想使用 swift 本机代码中的 RNCAynscStorage
来获取从我的 react 本机代码中存储的数据。
在尝试实施该模块之前,我询问了 RNC,他们回答:
这是可能的,但需要一些关于原生模块的知识 工作一般。我不确定这对未来有多大影响 即将在 React Native 中进行的重构工作,但这就是你的方式 今天可以访问它:
// First, get the RNCAsyncStorage instance from the bridge
RNCAsyncStorage *asyncStorage = [bridge moduleForClass:[RNCAsyncStorage class]];
// Then call the getter:
[asyncStorage multiGet:@[@"count"]] callback:^(NSArray *response)
NSObject *count = response[0];
if ([count isKindOfClass:[NSError class]])
// Failed to get count
return;
// Use count here
];
但是,我的扩展是用 swift 编写的,我不确定转换为 swift 后会是什么样子。
首先,我按照指南使反应桥模块可以在 swift 代码中访问,这就是我的 brinding 的样子:
我还尝试将 objecttive-C 示例转换为 seift,但正如您所见,这不起作用。
我不确定这是否是因为模块未正确公开/导入,或者仅仅是快速转换错误。但bridge
和RNCAsyncStorage
均未解决。
【问题讨论】:
【参考方案1】:据我了解,您想在扩展程序中访问 AsyncStorage(今天或共享)
我正在考虑您的扩展代码将在 swift 中。
第 1 步: 首先,您需要在扩展本身中创建桥接头,而不是在主项目中。
第 2 步: 在 Link Binary With Libraries (Under Build Phase) 中的 Share Extension Target 中声明要访问的所有库,尤其是 (libRNCAsyncStorage.a)
第 3 步: 在桥头文件(.h)中,您必须导入 RNCAsyncStorage.h
第 4 步:现在,在扩展程序中的任意位置访问 AsyncStore。
【讨论】:
嗨,谢谢,我真的可以在 7 个月前使用该建议/信息! :) 我最终将自己的键/值 json 文件写入 app.group 共享文件,并在完全不使用 RNCAsyncStorage 的情况下快速读取和写入同一个文件。但我相信这会奏效 那么哪种方法更好? 我认为这取决于需要做什么。在我的情况下,它正在传输一次性身份令牌以将扩展程序登录到远程服务。为此,我认为真正的最佳方法是使用钥匙串,但我找不到任何从反应原生添加到钥匙串的方法。我认为在 React Native 和原生 iOS 应用之间共享数据并不是一件容易的事,似乎大多数开发人员在做纯原生 iOS 应用时,只要它们变得有点复杂。我认为我没有资格说什么是最好的方法;) @Minkoo,我正在按照这里的说明进行操作。但卡在找不到“React/RCTBridgeModule.h”文件。错误来自在扩展中创建的桥接头文件。 @Erangad 桥接问题。创建 headerFile(目标 C)时,不要忘记选中目标复选框。一个当然是你的扩展和主要目标。以上是关于我如何使用本机 swift 代码中的 react 本机 RCNAsyncStorage 模块的主要内容,如果未能解决你的问题,请参考以下文章
react-native 应用程序视图加载时,如何在本机 ıos 上调用 ViewController 类?
如何将 React Native Promise 连接到 Swift