Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在按下视图控制器之前预加载所有tableView单元格_Ios_Swift_Uitableview_Uialertcontroller - Fatal编程技术网

Ios 如何在按下视图控制器之前预加载所有tableView单元格

Ios 如何在按下视图控制器之前预加载所有tableView单元格,ios,swift,uitableview,uialertcontroller,Ios,Swift,Uitableview,Uialertcontroller,我有一个UITableViewController和一个帖子列表。当我按下一个单元格时,我会在post图像和post评论下载过程中显示一个alertController。然后关闭alertController并按下PostViewcontroller的UIViewController。PostViewcontroller具有这些注释的UITableView 目前我的行为: 按下我的UITableViewController的一个单元格 显示alertController 下载图片和评论 关闭警报

我有一个UITableViewController和一个帖子列表。当我按下一个单元格时,我会在post图像和post评论下载过程中显示一个alertController。然后关闭alertController并按下PostViewcontroller的UIViewController。PostViewcontroller具有这些注释的UITableView

目前我的行为:

按下我的UITableViewController的一个单元格 显示alertController 下载图片和评论 关闭警报控制器 PostViewcontroller为调用CellForRowatineXpath 每个帖子的评论。有很多评论,所以我们需要一段时间 很多时间 最后,UITableViewController推送PostViewcontroller 在所有CellForRowatineXpath调用之后,我想在按下PostViewcontroller之前关闭alertController

例外行为:

按下我的UITableViewController的一个单元格 显示alertController 下载图片和评论 PostViewcontroller为调用CellForRowatineXpath 每个帖子的评论。有很多评论,所以我们需要一段时间 很多时间 关闭警报控制器 最后,UITableViewController推送PostViewcontroller 在我的UITableViewController中:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    var post : Post = posts[indexPath.row] as Post

    //Display the alert controller during the image downloading
    var alert = UIAlertController(title: "Alert", message: text, preferredStyle: UIAlertControllerStyle.Alert)
    self.presentViewController(alert, animated: true, completion: nil)

     // If the image does not exist, we need to download it
     var imageUrl: NSURL! = NSURL(string: post.attachment!.imageUrl)

     // Download an NSData representation of the image at the URL
     let request:NSURLRequest=NSURLRequest(URL:imageUrl)
     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in

         if error == nil {

            var image = UIImage(data: data)
            CoreDataManager.sharedManager.addImageToCoreData(post, image:image!, type:"full")

            //download the comments
            self.comments=self.api.getCommentsData(post)

            dispatch_async(dispatch_get_main_queue(), {
                 if let cellToUpdate = tableView.cellForRowAtIndexPath(indexPath) {

                    //Image and comments downloaded, dismiss the alertcontroller                                
                    self.dismissViewControllerAnimated(true, completion: {

                        self.performSegueWithIdentifier("postview", sender: self)

                    })

                    }
                })
            }   
        })
    } 
我使用prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "postview" {

        if let indexPath = self.tableView.indexPathForSelectedRow() {

            let destination = (segue.destinationViewController as! UINavigationController).topViewController as! PostViewController

            destination.post=selectedPost!
            destination.comments=comments!
            destination.delegate=self

            self.splitViewController?.toggleMasterView()             
        }
    }
}
我试图在prepareForSegue中关闭alertController,但出现以下错误:

pushViewController:animated: called on <UINavigationController 0x78e43070> while an existing transition or presentation is occurring; the navigation stack will not be updated.

我不知道该怎么做,如果可能的话。我遗漏了一些内容,但是什么?

在加载视图控制器本身之前,不能强制视图控制器的表视图加载其单元格

您可以将行为更改为以下内容:

按下我的UITableViewController的一个单元格 按下PostViewcontroller 从PostViewController内部显示alertController 下载图片和评论 告诉PostViewController的tableView重新加载数据,它只会 加载填充显示屏所需的单元格,使其不会 要花很多时间。 关闭警报控制器 另一种选择是让每个tableViewCell下载自己的图像和注释。它可以在下载过程中显示活动指示器,然后在下载完成后显示数据

苹果公司的示例代码演示了这一点: