2015-11-09 70 views
1

我的應用程序工作正常,直到它被轉換爲新雨燕.. 當我測試在某些視圖包含表意外地發現零而展開的可選值:SWIFT 2.1

fatal error: unexpectedly found nil while unwrapping an Optional value應用我得到這個錯誤

這裏就是應用程序每次粉碎功能:

 public func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 

      if(self.hasValue == true && self.beginNewObject == true){ 
       print("New employee..") 
       var stf : Staff = Staff(); 
       self.staffs?.append(stf); 
       self.beginNewObject = false; 

      } 

      if (self.currentElementValue == nil) 
      {self.currentElementValue = "";} 
      switch elementName{ 
      case "DepartmentName": 
       self.staffs?.last!.DepartmentName = self.currentElementValue; 
      case "DepartmentNumber": 
       self.staffs?.last!.DepartmentNumber = self.currentElementValue; 
      case "Center": 
       self.staffs?.last!.Center = self.currentElementValue; 
      case "Display_StaffResult": 
       print("DisplayResult"); 
      default: 
       print("default case"); 
      } 

      self.hasValue = false; 
     } 

而且我不知道在哪裏更改代碼,因爲沒有錯誤!

+0

添加所有異常brakpoint,然後您會看到錯誤引發的位置。 –

回答

2

在你行,你強迫員工展開最後一個屬性有一個發生錯誤對象:

self.staffs?.last! 

使用!你說我確定在我的可選項中有一個數據,但不幸的是你錯了,這就是爲什麼應用程序是粉碎。

你可以把它改成:

self.staffs?.last?... 

這是一個安全的方式還是那樣做:

if let last = self.staffs?.last { 
    last.DepartmentName = ... 
} 
0

看來你解開這可能不存在(空數組或自.last!元素.staffs不存在)。 嘗試給每個呼叫與下面的代碼替換到self.staffs?.last!

if let lastElem = staffs?.last { 
    lastElem = ... 
} 

或者交換機之前添加此,把開關這個括號內。

0

替換「!」用「?」

因爲你用「!」打開了一些零值,

嘗試添加異常斷點

+0

我懷疑他最後能做到這一點!因爲它是任務的左側值。 –

+0

@HermannKlecker是的,這是可能的。只有在左手不爲零時它纔會分配值。它被稱爲可選鏈(與Greg的答案相同)。 – Moritz

+0

有趣。我會試一試。我理解可選的鏈接略有不同。 –

相關問題