Как я могу получить доступ к NSUserDefault проекта iOS в react native?

#ios #swift #react-native

#iOS #swift #react-native

Вопрос:

Я создал один проект в iOS swift и создал несколько экранов в swift, теперь я хочу использовать эти экраны в react native, поэтому мне нужно получить доступ к swift NSUserDefault в react native для постоянного сеанса, поэтому, как я могу его использовать, пожалуйста, помогите мне.

Спасибо.

Ответ №1:

Самый простой способ — просто создать небольшой собственный модуль в objc (поскольку ReactNative SDK — это код objc) в вашем проекте XCode, добавив следующие файлы:

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 ) в swift с внешними объявлениями ( RCT_EXTERN_METHOD ).

Как использовать:

 import {
    ...
    NativeModules,
} from 'react-native';

...

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

Ответ №2:

Вы можете хранить данные в постоянном хранилище, подобном этому.

Вот пример фрагмента.

 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
        }
     });
  

Комментарии:

1. я уже установил заголовок в iOS swift, используя NSUserDefault, но я хочу получить доступ к этому сохраненному значению NSUserDefault в React native.

2. попробуйте AsyncStorage.getItem это

3. это дает мне Null

Ответ №3:

Вы можете напрямую использовать настройки из react-native, это оболочка поверх NSUserDefaults подробнее здесь

если вы получаете значение null при извлечении значения, которое вы установили на родной стороне iOS, необходимо проверить, поддерживается ли его возвращаемый тип мостом react-native, если вы попытаетесь отправить обратно тип данных, подобный NSDate , он выдаст вам null, поэтому проверьте список, если вам нужно какое-либо приведение к типу здесь