2016-02-24 120 views
1

我使用下面的代码来捕获collectionViewCell的帧更改。在UICollectionViewCell中添加/删除观察者

class MovieCardCollectionViewCell: UICollectionViewCell { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     awakeFromNib() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     awakeFromNib() 
    } 

    override func awakeFromNib() { 
     // configuring cell and views 

     contentView.addObserver(self, forKeyPath: "frame", options: .New, context: UnsafeMutablePointer<Void>()) 
    } 

    deinit { 
     contentView.removeObserver(self, forKeyPath: "frame") 
    } 

    override func updateViews() { 
     // changing some views 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context:  UnsafeMutablePointer<Void>) { 
     if let key = keyPath { 
      switch (key) { 
       case "frame": 
        updateViews() 
      default: break 
      } 
     } 
    } 
} 

但我仍然得到错误的UIView解除分配之前观察员被释放。

我对其他视图和其他对象使用相同的机制,它工作得很好。

任何想法?

回答

1

不保证awakeFromNib被调用一次。它可能被多次调用,导致不止一个观察者。