2016-02-24 122 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被調用一次。它可能被多次調用,導致不止一個觀察者。