Swift不平衡的调用开始/结束外观转换

12

这个问题困扰我有一段时间了。我在 UITabBarController 中放置了一个 UISplitViewController,其中主视图是一个表格视图。当我点击单元格时,会出现一个非常基本的视图控制器,只有一个居中的 UIButton。以下是该视图控制器的代码:

class TestViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @IBOutlet weak var button: UIButton!

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

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func buttonPressed(sender: AnyObject) {
        let pickerC = UIImagePickerController()
        pickerC.delegate = self

        pickerC.modalPresentationStyle = .Popover
        pickerC.popoverPresentationController?.sourceView = button as UIView
        pickerC.popoverPresentationController?.sourceRect = (button as UIView).bounds
        pickerC.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Any
        self.presentViewController(pickerC, animated: true, completion: nil)//4
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }

    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
       self.dismissViewControllerAnimated(true, completion: nil)
    }
}

如果我点击取消或选择图像,选择器控制器将正确地关闭。问题出现在我点击返回按钮返回到TableView时,我收到以下消息:

Unbalanced calls to begin/end appearance transitions for <TestViewController: 0x7fb882a72380>.

TestViewController非常基础,所以为什么会发生这种情况呢?


当您返回到 tableView 时,也许 tableView 再次尝试呈现此 VC? - Schemetrical
3个回答

12

如果您在之前的事务(动画)仍在进行中时尝试推送新的视图控制器,则会出现此问题。因此,请检查您的代码流程并进行适当的更改。检查您的dismiss和present视图动画。您可以使用属性setAnimation来解决这个问题,将其设置为“是/否”。

设置animated:NO可能会解决您的问题。


7
谢谢你的帮助。奇怪的是,它帮我找到了问题所在,问题出在UITabBarController的viewDidAppear方法中,我忘记加上这一行代码:super.viewDidAppear(animated)。 - Mike Walker
@MikeWalker 简单地调用 super.viewDidAppear 挽救了我的一天。 - Sonic Master
@MikeWalker,你救了我的一天,我也错过了super,谢谢。 - Sohaib Siddique

1

对我来说,在实现UISplitViewController后,这个奇怪的问题是由以下行导致的。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
.
.
.
    // splitViewController.preferredDisplayMode = .PrimaryOverlay
.
.
.
    }

通过在didFinishLaunchingWithOptions中注释掉这一行,问题得到了解决。

0
在我的情况下,我忘记删除故事板文件。在我删除它之后,这个警告就消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接