coh*_*air 3 ios firebase swift firebase-authentication firebaseui
我在网上找到的唯一相关问题是关于GitHub的问题报告:https: //github.com/firebase/FirebaseUI-iOS/issues/128
但是,似乎没有任何解决方案.
使用FirebaseUI,我想子类化,FUIAuthPickerViewController
所以我可以稍微自定义它.当我进行子类化和调用时FUIAuth.defaultAuthUI!.authViewController
,我得到以下运行时异常:
'NSInternalInconsistencyException',原因:'无法在bundle中加载NIB
我是Swift的新手,所以我很可能不正确地进行子类化FUIAuthPickerViewController
,但我在线阅读的所有内容都指向不是这样的情况.
这是我的子类:
import UIKit
import FirebaseAuthUI
class AuthViewController: FUIAuthPickerViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的代表:
public class AuthManager: NSObject, FUIAuthDelegate {
// TODO: Implement TOS URL
// TODO: Implement custom strings for multiple languages
static let instance = AuthManager()
private override init() {
super.init()
self.firebaseUI().delegate = self;
self.firebaseUI().providers = [FUIGoogleAuth(), FUIFacebookAuth()]
}
public func firebaseUI() -> FUIAuth {
return FUIAuth.defaultAuthUI()!
}
public func firebase() -> FIRAuth {
return FIRAuth.auth()!
}
public func addStateChangeListener(listener: @escaping FIRAuthStateDidChangeListenerBlock) {
self.firebase().addStateDidChangeListener(listener)
}
public func showLoginFrom(viewController: UIViewController) {
viewController.present(self.firebaseUI().authViewController(),
animated: true,
completion: nil)
}
// MARK: FUIAuthDelegate
public func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
}
public func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
return AuthViewController(authUI: authUI)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除默认FUIAuthPickerViewController
一切正常.我假设子类将从其父级继承其NIB(如果未定义).
任何帮助表示赞赏.
此致,科恩
事实证明,这是FirebaseUI中的一个错误,它已从旧版本重新浮出水面.
这个问题可以在这里跟踪.
临时解决方案是在FUIAuthPickerController
子类中硬编码正确的NIB名称:
迅速:
import UIKit
import FirebaseAuthUI
class AuthViewController: FUIAuthPickerViewController {
override init(nibName: String?, bundle: Bundle?, authUI: FUIAuth) {
super.init(nibName: "FUIAuthPickerViewController", bundle: bundle, authUI: authUI)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Run Code Online (Sandbox Code Playgroud)
Objective-C的:
@implementation CustomAuthPickerViewController
...
- (instancetype)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
authUI:(FUIAuth *)authUI {
self = [super initWithNibName:@"FUIAuthPickerViewController"
bundle:nibBundleOrNil
authUI:authUI];
if (self) {
self.title = @"Your Title";
}
return self;
}
...
@end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
626 次 |
最近记录: |