如果在PushViewController

时间:2015-09-05 15:32:26

标签: ios swift asynchronous crash completionhandler

我有什么

我不了解问题的本质。

我有2个视图控制器:

1) FeedViewController ,显示tableview中的事件

2) EventViewController ,按下事件时按下。

Feed Feed时,它会启动所有事件的所有图像的异步加载。 通过以下功能为每个事件完成:

    EventsManager().loadProfilePictureById(event.profilePictureID as String, currentProgress: event.profilePictureProgress, completionHandler: {
                        (progress:Double, image:UIImage!, error:NSError!) -> Void in
                        event.profilePictureProgress = progress
                        if image != nil {
                            event.profilePicture = image
                        }
                        if (error == nil){
                            if (self.tableView.headerViewForSection(index) != nil){
                                var header:eventHeaderView = self.tableView.headerViewForSection(index) as! eventHeaderView
                                header.updateProfilePicture(
                                    self.eventsManager.events[index].profilePictureID as String,
                                    progress: self.eventsManager.events[index].profilePictureProgress,
                                    image: self.eventsManager.events[index].profilePicture)
                            }
                        }else{
                            println("Error:" + error.description)
                        }
                    })

以下是我如何推送 EventViewController

    func PushEventViewController(sender:UITapGestureRecognizer)->Void{

    let ViewSender = sender.view!
    let selectedRow = ViewSender.tag
    //let Cell:HomeEventTableViewCell = TimelineEventTable.cellForRowAtIndexPath(SelectedIndexPath) as HomeEventTableViewCell
    dispatch_async(dispatch_get_main_queue(), {
        () -> Void in
        let VC:EventViewController = self.storyboard?.instantiateViewControllerWithIdentifier("EventViewController") as! EventViewController
        VC.event = self.eventsManager.events[selectedRow]
        self.navigationController?.pushViewController(VC, animated: true)
    })
}

问题

问题是,如果我按下事件并在下载图像之前按 EventViewController (完成处理程序仍然被调用),它会崩溃应用程序。

假设

我挣扎了几天,无法找到解决方案, 但我的假设是完成处理程序后调用

在推送EventViewController后尝试执行以下行时发生崩溃:

                        event.profilePictureProgress = progress
                        if image != nil {
                            event.profilePicture = image
                        }

我假设在推送新视图控制器时,正在释放在完成处理程序中使用的事件对象

1 个答案:

答案 0 :(得分:1)

发现问题出在哪里,问题是变量event.profilePictureProgress被声明为动态var(之后我会利用它来添加观察者)。