У меня есть рабочая страница системы вид контроллера с этим (только собирается вставить абсолютно все, уверен, что этот вопрос просто лежит в моем firebase наблюдения вблизи вершины):UIPageViewController сбой, когда не используя статические данные
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
}
}
Таким образом, в основном большая часть из них просто скопирована из другого источника и работает. Он создает 4 страницы из массива pageTitles, которые прокручиваются, а на другом VC я передаю 1,2,3 и 4, а метка отображает все в массиве, как это должно выглядеть scrollview.
Проблема возникает, когда я стараюсь не жестко закодировать pageTitles и вместо этого вытащить ее из firebase.
Когда я комментирую, где я жестко кодирую массив pageTitles, я получаю неожиданное значение nil в своем ContentViewController, где я отправляю заголовки, и мне нравится titleLabel.text = (то, что было отправлено).
Я подумал, может быть охраняя его с если/позволить, чтобы firebase время загрузки материала в помогло бы, так что я сделал
if let title = (what was sent over) {
titleLabel.text = title
}
Ничто не появляется на экране, когда это происходит, а затем, если я прокрутка влево или вправо. Я получаю сообщение об ошибке с индексами на моих страницах.
Я чувствую, что это должно быть очень просто и очень похоже на табличное представление? Загружайте данные из firebase, заполняйте массив информацией, используйте if/allow, чтобы позволить firebase некоторое время для загрузки, а затем обновить интерфейс на основе массива.