ios - 在实例化 pageViewController 之前如何运行查询并填充数组

标签 ios swift uipageviewcontroller

我正在从 Parse 导入数据并尝试将其放入页面 View Controller 。查询代码正确,但未被调用。它尝试将数组中的对象添加到 pageviewcontroller,但这些数组是空的,它们只会在查询后填充。那么如何确保查询首先运行并填充数组?

override func viewDidLoad() {
    super.viewDidLoad()
    testRetrieveInfo()
}

 func retrieveinfo(callback:([String])->Void){

     let query = PFQuery(className: "Animals")
        query.findObjectsInBackgroundWithBlock { (objects:[PFObject]?, error: NSError?) in
                if(error == nil){
                    for object in objects!{     
                        if let importname = object["Name"] as? String{
                            self.name = NSArray(object: importname)
                            print(self.name) //Nothing prints, I also breakpoint and it crashes first, crash location is above in viewDidLoad
                        }
                    }

                }else{
                        print(error)
                }
            }
       }
  }

func testRetrieveInfo(){
    self.retrieveInfo { (results:[String]) -> Void in
        //Setup here the PageViewController
        self.pageViewController.storyboard?.instantiateViewControllerWithIdentifier("PageVC") as? UIPageViewController
        self.pageViewController.dataSource = self
        var startVC = self.viewControllerAtIndex(0) as? Jwasy
        var 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.height)
        self.addChildViewController(self.pageViewController)
        self.view.addSubview(self.pageViewController.view)
        self.pageViewController.didMoveToParentViewController(self)
        print("called")//not printed
    }
}

最佳答案

要在下载数据时得到通知,您有不同的选择(但最基本的是在查询回调中设置 PageViewController):

0 - 您可以创建一个方法来设置 PageViewController 并在查询的回调中调用。

1 - 创建您自己的回调

func retrieveInfo(callback:([String])->Void){
    //Inside your query callback you're going to call yours
    let query = PFQuery(className: "Animals")
    query.findObjectsInBackgroundWithBlock { (objects:[PFObject]?, error: NSError?) in
        if(error == nil){
            var results:[String] = []
            for object in objects!{     
                 if let importname = object["Name"] as? String{
                     self.results.append(importname)
                 }
            }
            callback(results)
        }else{
            //Can also create a callback for failure 
            print(error)
        }
   }
}

//Used 
func testRetrieveInfo(){
    self.retrieveInfo { (results:[String]) -> Void in
        //Setup here the PageViewController
    }
}

2 - 创建委托(delegate)

3 - 通知中心

注意: 您每次在循环中都在重新创建名称数组。你能打印断点的屏幕吗?

关于ios - 在实例化 pageViewController 之前如何运行查询并填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37688716/

相关文章:

javascript - 我在 IOS 中遇到了 UIWebview 对象的奇怪问题

ios - 使用 SceneKit 控制飞行器的运动

ios - tableview数据加载顺序错误

ios - 使用 UINavigationController 在 UIPageViewController 中下推内容

objective-c - 基于 iOS 页面的应用程序清除颜色问题

ios - 如何删除 UIPageViewController 中的页面?

ios - 如何在开发版本中测试使用Branch.io创建的分支链接的“应用程序内打开”功能?

ios - 没有这样的模块,swift,xcode 6.2

ios - 我正在制作 list ,是否可以使用 Segue 选择和取消选择

swift - 如何在 Swift 中对 UIBarButtonItem 应用垂直对齐