gpt4 book ai didi

ios - 不使用静态数据时 UIPageViewController 崩溃

转载 作者:行者123 更新时间:2023-11-28 16:14:36 25 4
gpt4 key购买 nike

我有一个可用的页面 View Controller 系统(只是要粘贴所有内容,很确定问题出在顶部附近的我的 firebase 观察中):

class IndividualPeopleVC: UIViewController, UIPageViewControllerDataSource  {

var pageViewController: UIPageViewController!


var pageTitles : [String]!
var imageURLS: NSArray!

let currentUser = FIRAuth.auth()?.currentUser?.uid

override func viewDidLoad()

{

super.viewDidLoad()

self.pageTitles = []
self.pageTitles = ["1", "2", "3", "4'"]
DataService.ds.REF_INTERESTS.child(passedInterest).child("rooms").child(passedRoom).child("users").observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in

print(snapshot.value)
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {

let name = snap.key
let uid = snap.value as! String

let person = Person(name: name, bio: "", UID: uid)

if person.UID != self.currentUser {

self.pageTitles.append(uid)
}

}

}
self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController

self.pageViewController.dataSource = self


let startVC = self.viewControllerAtIndex(0) as ContentViewController

let viewControllers = NSArray(object: startVC)

self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: true, completion: nil)

self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height - 60)

self.addChildViewController(self.pageViewController)

self.view.addSubview(self.pageViewController.view)

self.pageViewController.didMoveToParentViewController(self)

}

func viewControllerAtIndex(index: Int) -> ContentViewController

{

if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) {

return ContentViewController()

}

var vc: ContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ContentViewController") as! ContentViewController

vc.titleText = self.pageTitles[index] as! String
vc.imageFile = self.pageImages[index] as! String

vc.pageIndex = index

return vc

}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?

{


var vc = viewController as! ContentViewController

var index = vc.pageIndex as Int

if (index == 0 || index == NSNotFound)

{

return nil

}


index--

return self.viewControllerAtIndex(index)

}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

var vc = viewController as! ContentViewController

var index = vc.pageIndex as Int

if (index == NSNotFound) {

return nil

}

index++



if (index == self.pageTitles.count){

return nil

}

return self.viewControllerAtIndex(index)

}



func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int{

return self.pageTitles.count

}


func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int{

return 0

}
}

所以基本上大部分内容只是从另一个来源复制粘贴并且有效。它从滚动的 pageTitles 数组创建 4 个页面,在另一个 VC 上我传递 1、2、3 和 4,并且标签显示数组中的所有内容,就像 ScrollView 应该的那样。

当我尝试不对 pageTitles 进行硬编码而是从 firebase 中提取它时,问题就来了。

当我注释掉我对 pageTitles 数组进行硬编码的地方时,我在发送标题的 ContentViewController 上得到了一个意外的 nil 值,我喜欢 titleLabel.text =(发送的内容)。

我想也许用 if/let 来保护它,让 firebase 有时间加载东西会有所帮助,所以我做了一个

if let title = (what was sent over) {
titleLabel.text = title
}

当发生这种情况时,屏幕上没有任何显示,然后如果我向左或向右滚动,我会在 pagebefore/pageafters 中收到索引向下的错误。

感觉这个应该 super 简单,很像tableview吧?从 firebase 加载数据,用信息填充数组,使用 if/lets 让 firebase 有时间加载,然后根据数组更新 UI。

最佳答案

我认为您的 DataService 是异步的。数据准备好后,您必须创建 pageviewcontroller。试试这个修改后的 viewDidLoad 方法。

覆盖函数 viewDidLoad()

{

super.viewDidLoad()

self.pageTitles = []

//self.pageTitles = ["1", "2", "3", "4'"] DataService.ds.REF_INTERESTS.child(passedInterest).child("rooms").child(passedRoom).child("users").observeSingleEventOfType(.Value) {(快照:FIRDataSnapshot)在

    print(snapshot.value)
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {

let name = snap.key
let uid = snap.value as! String

let person = Person(name: name, bio: "", UID: uid)

if person.UID != self.currentUser {

self.pageTitles.append(uid)
}

}

self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController

self.pageViewController.dataSource = self


let startVC = self.viewControllerAtIndex(0) as ContentViewController

let viewControllers = NSArray(object: startVC)

self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: true, completion: nil)

self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.size.height - 60)

self.addChildViewController(self.pageViewController)

self.view.addSubview(self.pageViewController.view)

self.pageViewController.didMoveToParentViewController(self)

}

关于ios - 不使用静态数据时 UIPageViewController 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39240084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com