Singleton Class未正确更新

时间:2017-05-02 18:23:03

标签: ios swift uicollectionview singleton

我有一个collectionViewController和一个普通的viewcontroller。当点击一个单元格时,它会转到VC并将标签设置为轻敲的单元格。这个变量是一个单例类。

我遇到的问题是,当您第一次点击一个单元格并转到VC时,标签不会说任何内容(控制台会打印正确的数据)。然后你回到collectionView并点击一个不同的单元格,视图中的标签现在显示你之前点击的单元格

我尝试清理构建文件夹等,但没有做任何事情。我还尝试了另一种方法 - let CVC = CollectionViewController()然后lbl.text = CVC.cellTapped(先创建var),但这也没有用。

SharingManager.swift

class SharingManager { 
          var cellChoose = String()
static let sharedInstance = SharingManager()
}

CollectionViewController.swift

    class CollectionViewController: UICollectionViewController {

    let sm = SharingManager.sharedInstance 


  override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 3
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)

    // Configure the cell
    let lbl = cell.viewWithTag(1) as! UILabel
    lbl.text = String(indexPath.row)

    return cell
}

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    sm.cellChoose = "cell\(indexPath.row)"
   print(sm.cellChoose)

}

}

VC2.swift (点按一个单元格的视图控制器会将您带到)

class VC2: UIViewController {


    let sm2 = SharingManager.sharedInstance

    @IBOutlet weak var lbl2: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()


        self.lbl2.text = sm2.cellChoose
        //print(sm2.cellChoose)


    }

1 个答案:

答案 0 :(得分:0)

由于您是通过segue进行导航,因此在调用ViewController之前可能会加载新的didSelectItem。将lbl2.text = sm2.cellChoose移至viewWillAppear将解决您的问题。

使用segues执行此操作的“正确”方法是在prepareForSegue处理此问题,但您现在所拥有的将会有效。