View Controller 显示黑屏而不是从 Firebase 数据库 Swift iOS 中获取用户

Posted

技术标签:

【中文标题】View Controller 显示黑屏而不是从 Firebase 数据库 Swift iOS 中获取用户【英文标题】:View Controller shows black screen instead of fetching users from Firebase database Swift iOS 【发布时间】:2017-06-05 10:04:56 【问题描述】:

当我转到 HomeViewController 时,屏幕全黑。我实际上想获取用户将它们放入 TableViewCells。我使用 Firebase 作为数据库,使用 Swift 作为语言。帮我完成这个。

import UIKit
import Firebase

class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 
    @IBOutlet weak var tableView: UITableView!

    var users = [User]()

    override func viewDidLoad() 
        super.viewDidLoad()
        fetchUser()
    

    func fetchUser()        
        FIRDatabase.database().reference().child("users").observe(.childAdded, with:  (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject] 
                let user = User(dictionary: dictionary)
                self.users.append(user)

                //this will crash because of background thread, so lets use dispatch_async to fix
                DispatchQueue.main.async(execute: 
                    self.tableView.reloadData()
                )
            
        , withCancel: nil)
    

    func handleCancel() 
        dismiss(animated: true, completion: nil)
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return users.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        let cell = tableView.dequeueReusableCell(withIdentifier: "resultCell", for: indexPath)
        let user = users[indexPath.row]
        cell.textLabel?.text = user.name
        cell.detailTextLabel?.text = user.email
        return cell
    


class UserCell: UITableViewCell 
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) 
        super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
    

    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

通过 LoginButton 下的 SWRevealViewController 呈现 Home View Controller

let vc : SWRevealViewController = self.storyboard?.instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController
self.present(vc, animated: true, completion: nil)

架构

【问题讨论】:

能否请您展示一下您如何呈现Home View Controller 的代码? PS:顺便说一句,您在这里有两个问题:1.为什么显示黑屏2.如何获取数据 @TungFam 我已经更新了问题 【参考方案1】:

问题

您可能没有设置导航控制器的 RootViewController。

解决方案

选择SWRevealViewControllerNavigationController 之间的转场。在属性检查器中,将 segue 标识符设置为 “sw_front”。这是表示前视图控制器转换的默认标识符。

对于SWRevealViewController 和侧边栏视图控制器之间的segue,将segue 标识符设置为“sw_rear”。这个标识符告诉SWRevealViewController控制器代表后视图

【讨论】:

按照您的建议设置,但我不知道为什么它显示为黑色 您是否将SWRevealViewController 添加为Identifire?【参考方案2】:

通过将其添加到ViewDidLoad 一切正常............

    menuHome.target = SWRevealViewController()
    menuHome.action = #selector(SWRevealViewController.revealToggle(_:))
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())

    tableView.delegate = self
    tableView.dataSource = self

【讨论】:

以上是关于View Controller 显示黑屏而不是从 Firebase 数据库 Swift iOS 中获取用户的主要内容,如果未能解决你的问题,请参考以下文章

iPad上的黑屏而不是启动图像

Flutter for iOS 12.1:黑屏而不是应用程序

IOS:将viewcontroller添加到ios中的自定义TabBar

使用jQuery AJAX请求CodeIgniter从Controller显示数据库中的数据到View而不刷新页面

在发送按钮之前单击联系人按钮时出现黑屏

为啥navigationBar和view之间显示黑屏