2015-11-09 2 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

произошла ошибка в одной из линий, где вы вынуждаете UnWrap последнего свойство на штабах объект:

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 Да, это возможно. Он присваивает значение только в том случае, если левая часть не равна нулю. Это называется опциональным цепочкой (так же, как в ответе Грега). – Moritz

+0

Интересно. Я попробую. Я понял, что дополнительная цепочка несколько отличается. –

 Смежные вопросы

  • Нет связанных вопросов^_^