2017-07-27 101 views
0

我有用於添加漸變圖層的UIView擴展。 我知道我無法在擴展中創建類型CAGradientLayer(或任何其他類型...)的存儲屬性,所以我想在UIView本身中創建gradientLayer屬性(在擴展中爲no)並檢查如果該屬性存在,則在擴展中。 於是我問:Swift - 通過名稱獲取屬性crashForUndefinedKey錯誤

extension UIView 
{ 
    private var gradientLayer:CAGradientLayer? 
    { 
     return value(forKey: "gradientLayer") as? CAGradientLayer 
    } 

    func addGradient() 
    { 
     guard gradientLayer != nil else 
     { 
      return 
     } 

     // do something with the layer 
     } 
} 

當此屬性存在,一切都很好,但在其他方面有錯誤的程序崩潰:

valueForUndefinedKey:]: this class is not key value coding-compliant for the key gradientLayer.

是否有可能知道這個屬性這樣沒有崩潰存在應用程序?

+1

添加一些截圖以瞭解更多關於此問題的信息 –

回答

1

子類UIView和執行valueForUndefinedKey:,以便它做一些事情而不是崩潰。

但是,我會用完全不同的方式去討論這個問題。我會在視圖的中存儲額外的信息。一個圖層可以存儲任何密鑰下的信息,並且如果詢問不存在的密鑰,則不會崩潰。