我正在為一個 RN 應用程式在 Swift 中構建一個本機模塊,在其中我“洗掉”RN 視圖并加載一個故事板,一切正常,但我需要從 RN 向這個模塊發送一個值,但它沒有被保存,我想這是因為控制器在呼叫后再次加載所以值丟失
這是我的代碼的簡化版本,我openMyModule
用值呼叫 RN 端的函式,它應該將值保存在一個變數中,然后它呼叫 AppDelegate 上的一個函式,該函式將打開 Storyboard
@objc (MyModule) class MyModule : UIViewController {
@objc static func requiresMainQueueSetup() -> Bool { return true }
var value = ""
@objc func openMyModule(_ rn_value: String) -> Void {
self.value = rn_value
DispatchQueue.main.async {
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.goToNativeView()
}
}
}
}
這是 AppDelegate 的功能
- (void) goToNativeView
{
UIViewController *vc = [UIStoryboard storyboardWithName:@"MyModuleScreen" bundle:nil].instantiateInitialViewController;
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
}
我認為當我goToNativeView
再次呼叫我的控制器時,這就是價值丟失的原因
所以,我需要的是在我的控制器上仍然可用的值,或者將值保存在 AppDelegate 上并在需要時呼叫它
我有什么辦法可以做到這一點?
uj5u.com熱心網友回復:
如果其他人遇到這個問題,我是這樣解決的:
我創建了另一個 Swift 檔案來保存這個值并將變數設為靜態
class AnotherClass {
static var value = ""
}
然后,當我收到它時設定值
@objc (MyModule) class MyModule : UIViewController {
@objc static func requiresMainQueueSetup() -> Bool { return true }
@objc func openMyModule(_ rn_value: String) -> Void {
AnotherClass.value = rn_value
DispatchQueue.main.async {
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.goToNativeView()
}
}
}
}
現在它可以作業了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/533285.html