子类化FUIAuthPickerViewController时"无法加载NIB"

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(如果未定义).

任何帮助表示赞赏.

此致,科恩

coh*_*air 5

事实证明,这是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)