2016-03-30 17 views
0

: Bu koduönemli hata: Bir CAGradientLayer için Renkler tanımlarken bir Opsiyonel değeri unwrapping ederken beklenmedik nil bulundu ben bu hata ölümcül hatayı almaya edilmiştir

unexpectedly found nil while unwrapping an Optional value.

class ShimmerView: NSObject { 

    // weak propeties 
    weak var animatedView : UIView! 

    // Strong Properties 
    var shadowBackgroundColor : UIColor! 
    var shadowForegroundColor : UIColor! 
    var shadowWidth : CGFloat! 
    var repeatCount : CGFloat! 
    var duration : NSTimeInterval! 

    var currentAnimation : CABasicAnimation! 

    func commonInit(){ 
     self.shadowBackgroundColor = UIColor(white: 1, alpha: 0.3) 
     self.shadowForegroundColor = UIColor.whiteColor() 

     self.shadowWidth = 20 
     self.repeatCount = CGFloat.infinity 
     self.duration = 3.0 
    } 

    func start(){ 

     if(self.animatedView == nil){ 
      print("ShimmerView has nothing to return") 
      self.stop() 
     } 

     let gradientMask = CAGradientLayer() 
     gradientMask.frame = self.animatedView.bounds 

     let gradientSize : CGFloat = self.shadowWidth/self.animatedView.frame.size.width 

     let startLocations : NSArray = [0,Int(gradientSize/2.1),Int(gradientSize)] 
     let endLocations : NSArray = [Int(1.0 - gradientSize) , Int(1.0 - (gradientSize/2.0)) , 0] 
     // The error is on this line 
     gradientMask.colors = [self.shadowBackgroundColor.CGColor , self.shadowForegroundColor.CGColor , self.shadowBackgroundColor.CGColor] 
     gradientMask.locations = startLocations as? [NSNumber] 
     gradientMask.startPoint = CGPointMake(0 - (gradientSize * 2), 0.5) 
     gradientMask.endPoint = CGPointMake(1 + gradientSize, 0.5) 

     self.animatedView.layer.mask = gradientMask 

     currentAnimation = CABasicAnimation(keyPath: "locations") 
     currentAnimation.fromValue = startLocations 
     currentAnimation.toValue = endLocations 
     currentAnimation.repeatCount = Float(self.repeatCount) 
     currentAnimation.duration = self.duration 
     currentAnimation.delegate = self 

     gradientMask.addAnimation(currentAnimation, forKey: "ShimmerView") 
    } 

i debug ama Hatanın oluştuğu kodda yazdığım hatayla ilgili hiçbir şey bulamıyorum

+0

Hata nasıl oluyor? – dan

+0

Kodunuzdaki '!' Tüm örneklerini kaldırın ve hata gider. –

+0

Ben dikkatle kodu @dan –

cevap

0

Değişkenlerinizin birçoğunu örtülü isteğe bağlı isteğe bağlı olarak bildiriyorsunuz! örneğin değişkenin tipi),: Apple's documentation itibaren

weak var animatedView : UIView! 

"isteğe bağlı değeri isteğe bağlı ilk tanımlanır hemen sonra varolmaya onaylanır ve kesinlikle her varolmaya varsayılabilir zaman Dolaylı olarak açılmamış opsiyoneldir faydalıdır bundan sonra gelin. Swift de dolaylı olarak açılmamış seçeneklere birincil kullanımı "Kodunuzdaki itibaren

Gerçekten eğer, hızlı bir hata atar değişken varlık başlatıldı animatedView göremiyorum sınıf başlatma sırasında olduğu (Opsiyonel malzemeler olarak ilan edilmez) Değişkenleriniz başlatılmamış, ancak, sınıf başlatılır başlatılmaz kullanılabilir olduğu varsayılan örtülü isteğe bağlı isteğe bağlı için bu durum değildir.

Sorununuzun bununla ilgili olabileceğini düşünüyorum, daha önce bir kesme noktası ayarlayabilirsiniz Hatayı atan ve isteğe bağlı değişkenlerin hangisinin sıfır olduğunu gösteren çizgi. AnimatedView'ın zayıf bir değişken olduğunu görüyorum, bunun için iyi bir neden var mı? Bir noktada bertaraf edilir.

Şerefe.