相关疑难解决方法(0)

为什么 viewDidLoad() 被调用两次?

出于某种原因,我的数据被两次保存到模型中。为什么要viewdidload运行两次?这个控制器的目的是成为一个记分牌。它由使用核心数据的数据填充。我试过删除 tablecontroller 并添加一个新的。

import UIKit
class ScoreboardTableViewController: UITableViewController {

    var model = scoreboardModel.sharedInstance
    var numbers = [9,12,9]// [Int]()
    var timer = "k"
    var date = "thedateToday"



    override func viewDidLoad() {
        super.viewDidLoad()
        var count = numbers.count
        var x = String(count)


        if(timer != "k"){
            model.saveScoreboard(date, numsMemorized: x,time: timer)
            println("saved!")
        }
        model.getScoreboards()

        }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

      // MARK: - Table view data source


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return model.scoreboard.count
    }


    override func …
Run Code Online (Sandbox Code Playgroud)

uitableview ios swift

5
推荐指数
1
解决办法
1万
查看次数

ViewController似乎转换两次

问题摘要

我的mainVC - >第二次VC转换似乎运行了两次.然而,奇怪的是第二个VC的viewDidLoad只运行一次.这是我的项目中唯一存在此问题的转换.

我已经研究了这个并发现了两次加载问题,但没有一个与我的转换两次匹配,但加载一次场景.常见问题,例如在故事板中添加了两个segue的人,没有出现在我的项目中:

在此输入图像描述

在我的第一个/根视图控制器(称为mainVC)中,我以编程方式在viewDidLoad中添加边缘平移手势:

        let panLeftEdgeGesture_MainVC = UIScreenEdgePanGestureRecognizer(target: self, action: "panLeftEdge_toLifeList:")
        panLeftEdgeGesture_MainVC.edges = .Left
        view.addGestureRecognizer(panLeftEdgeGesture_MainVC)
Run Code Online (Sandbox Code Playgroud)

当用户滑动该平移手势时,它会触发一个调用segue到下一个VC的函数.问题是,VC转换出现两次,然后一切正常.什么都没有破裂或崩溃.如果我单击我的自定义后退按钮,则退回到mainVC只会出现一次.

关于原因的实验

这是一个奇怪的部分:为了理解什么是理解,我插入了一些println代码,这是控制台打印的内容:

No matching prepareForSegue: So did nothing to prepare.
LifeList_CollectionView viewDidLoad did run
Pan segue from mainVC to Life Lists did run
No matching prepareForSegue: So did nothing to prepare.
Run Code Online (Sandbox Code Playgroud)

第一行是prepareForSegue运行.它说"什么也没做",因为在我的prepareForSegue中它会检查哪个segue正在运行,有时它会传递一些代码.在这种情况下,prepareForSegue只会打印该行.

第二行是第二个VC的viewDidLoad运行.

第三行看起来很怪异而且不合适我,但我不是专家.println位于mainVC中,并且由pan手势调用的函数打印,这是首先触发segue的函数.为什么这不会在第二个VC的viewDidLoad之前打印?:

func panLeftEdge_toLifeList(sender: UIScreenEdgePanGestureRecognizer) {
    performSegueWithIdentifier("segueToLifeLists", sender: nil)
    println("Pan segue from mainVC to Life Lists did run")
}
Run Code Online (Sandbox Code Playgroud)

第四行是mainVC的第二次运行的prepareForSegue.但是,我没有看到控制台打印第二个viewDidLoad,即使在视觉上我看到转换发生两次.

知道什么可能导致这种奇怪的行为,或者至少,任何技巧来阻止这种行为?

viewdidload ios segue uistoryboardsegue swift

2
推荐指数
2
解决办法
3439
查看次数

标签 统计

ios ×2

swift ×2

segue ×1

uistoryboardsegue ×1

uitableview ×1

viewdidload ×1