我在网上找到的唯一相关问题是关于GitHub的问题报告: https://github.com/firebase/FirebaseUI-iOS/issues/128
然而,似乎没有任何解决方案。
使用FirebaseUI,我希望继承FUIAuthPickerViewController
,以便我可以稍微自定义它。当我继承并调用FUIAuth.defaultAuthUI!.authViewController
时,我得到以下运行时异常:
' NSInternalInconsistencyException',原因:'无法在捆绑中加载NIB
我是Swift的新手,所以我很可能错误地将FUIAuthPickerViewController
子类化,但我在线阅读的所有内容都指向了不是这样的情况。
这是我的子类:
import UIKit
import FirebaseAuthUI
class AuthViewController: FUIAuthPickerViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
这是我的代表:
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)
}
}
如果删除默认FUIAuthPickerViewController
,一切正常。我假设子类将从其父级继承其NIB,如果没有定义它。
感谢任何帮助。
此致 科恩
答案 0 :(得分:5)
事实证明,这是FirebaseUI中的一个错误,它已从旧版本重新出现。
可以跟踪问题here。
临时解决方案是在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()
}
}
目标-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
答案 1 :(得分:0)
var datetime = DateTime.Now;
var newDateTime = datetime.AddHours(DateTime.Parse("6:00 PM").Hour);
是FUIAuthPickerViewController
。
如果为nibName参数指定nil并且未覆盖loadView()方法,则视图控制器将按照nibName属性中的描述搜索nib文件。
具体来说,它会查找具有适当名称的nib文件 (没有.nib扩展名)并在其视图时加载该nib文件 请求。具体来说,它(按顺序)查找带有的nib文件 以下名称之一:
如果视图控制器类名以“Controller”结尾,如在MyViewController中,它会查找名称与之匹配的nib文件 没有单词'Controller'的类名,如MyView.nib。
- 醇>
它查找名称与视图控制器类名称匹配的nib文件。例如,如果类名是MyViewController, 它查找MyViewController.nib文件。
这里没有任何暗示它会检查nib的所有超类的名称。我假设它正在检查“AuthView.nib”和“AuthViewController.nib”,然后放弃。
答案 2 :(得分:0)
这似乎也是由FirebaseUI上的一个错误引起的,我遇到了同样的问题并实现了几个解决方案,但只有在我从Firebase 4.1.0更新到Firebase 4.1.1之后才能工作。
此git repo也声称此更新中已修复该错误。
您可以通过以下方式查看您当前所处的版本: ' pod搜索FirebaseUI'在项目路径位置的终端中,如果它不是最新版本,只需执行“更新”即可。这有希望解决问题。