2017-02-03 16 views
0

Я пытаюсь настроить FUIAuthPickerViewController так что я могу иметь настроенный экран аутентификации, как мой экран входа в систему с использованием аутентификации FirebaseUIПопытка настроить FUIAuthPickerViewController и получать ошибку в AppDelegate

*** Нагрузочный приложение из-за неперехваченного исключением «NSGenericException», причина: «Этот кодер требует, чтобы замененные объекты будут возвращены из initWithCoder:»

Я знаю, что есть ошибка, которая останавливает FUIAuthPickerViewController от того, чтобы контроллер представления корня, поэтому в Main.Storyboard я добавил бл ank view и установите класс для моего CustomLoginViewController, какие подклассы FUIAuthPickerViewController

Удивление, может ли кто-нибудь указать мне в правильном направлении? Не знаю, почему я получаю эту ошибку.

Благодаря

import UIKit 
import FirebaseAuth 
import FirebaseAuthUI 

class CustomLoginViewController: 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() 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

    if !isUserSignedIn() { 
     showLoginView() 
    } 
} 

private func isUserSignedIn() -> Bool { 
    guard FIRAuth.auth()?.currentUser != nil else { return false } 
    return true 
} 

private func showLoginView() { 
    if let authVC = FUIAuth.defaultAuthUI()?.authViewController() { 
     present(authVC, animated: true, completion: nil) 
    } 
} 

Это мой AppDelegate.swift

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, FUIAuthDelegate { 

var window: UIWindow? 
var storyboard: UIStoryboard? 
var authUI: FUIAuth? 

let providers: [FUIAuthProvider] = [ 
    FUIGoogleAuth(), 
    FUIFacebookAuth() 
] 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    FIRApp.configure() 

    authUI = FUIAuth.defaultAuthUI() 
    authUI?.delegate = self 
    authUI?.providers = providers 

    return true 
} 

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) { 
    print("SIGNED IN") 
} 

public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    let handled = SDKApplicationDelegate.shared.application(app, open: url, options: options) 

    return handled || GIDSignIn.sharedInstance().handle(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 
} 

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController { 
    return CustomLoginViewController(authUI: authUI) 
} 

Это полный стек вызовов

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:' 
*** First throw call stack: ( 0 CoreFoundation      0x00000001065c1d4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010602321e objc_exception_throw + 48  2 CoreFoundation  0x000000010662b2b5 +[NSException raise:format:] + 197 3 UIKit  0x0000000104dda1eb UINibDecoderDecodeObjectForValue + 758 4 UIKit 0x0000000104dd9eee -[UINibDecoder decodeObjectForKey:] + 98  5 UIKit 0x0000000104be5d14 -[UIRuntimeConnection initWithCoder:] + 178 6 UIKit        0x0000000104dda1a1 UINibDecoderDecodeObjectForValue + 684 7 UIKit      0x0000000104dda357 UINibDecoderDecodeObjectForValue + 1122 8 UIKit 0x0000000104dd9eee -[UINibDecoder decodeObjectForKey:] + 98 9 UIKit 0x0000000104be4eb8 -[UINib instantiateWithOwner:options:] + 1249 10 UIKit        0x0000000104fa4f7b -[UIStoryboard instantiateViewControllerWithIdentifier:] + 181 11 UIKit    0x00000001047d747d -[UIApplication 
_loadMainStoryboardFileNamed:bundle:] + 111  12 UIKit        0x00000001047d7947 -[UIApplication _loadMainInterfaceFile] + 260 13 UIKit        0x00000001047d5fa8 -[UIApplication 
_runWithMainScene:transitionContext:completion:] + 1406  14 UIKit        0x00000001047d326d -[UIApplication workspaceDidEndTransaction:] + 188 15 FrontBoardServices     0x000000010925a6cb 
__FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24 16 FrontBoardServices     0x000000010925a544 
-[FBSSerialQueue _performNext] + 189 17 FrontBoardServices     0x000000010925a8cd -[FBSSerialQueue _performNextFromRunLoopSource] + 45  18 CoreFoundation      0x0000000106566761 
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17  19 CoreFoundation      0x000000010654b98c 
__CFRunLoopDoSources0 + 556  20 CoreFoundation      0x000000010654ae76 __CFRunLoopRun + 918  21 CoreFoundation   0x000000010654a884 CFRunLoopRunSpecific + 420  22 UIKit    0x00000001047d1aea -[UIApplication _run] + 434 23 UIKit    0x00000001047d7c68 UIApplicationMain + 159 24 Surfshop    0x0000000100f54cbf main + 111 25 libdyld.dylib      0x00000001073e968d start + 1 26 ???         0x0000000000000001 0x0 + 1) libc++abi.dylib: terminating with uncaught exception of type NSException 

ответ

0

Решил проблему, создав новый подкласс UIViewController называется MyViewController и установите для свойства class в раскадровке значение MyViewController, а не Custom LoginViewController