2016-12-13 1 views
-2

У меня есть одно выпадающее изображение с одним текстовым полем, uipicker. Поэтому, когда пользователь нажимает текстовое поле - uipicker откроется, чтобы выбрать значение, и одна кнопка будет доступна для uipicker. Когда пользователь нажимает эту кнопку, выбранная пользователем кнопка будет добавлена ​​в значение текстового поля.Неустранимая ошибка: неожиданно найден nil во время разворачивания Необязательное значение для uiimageview

Но я добавил один вид изображения в правом углу текстового поля. Когда пользователь нажимает текстовое поле и при открытии uipicker, uiimageview будет вращаться вверх и вниз. И когда пользователь нажимает кнопку «done», это изображение будет выглядеть нормально.

Но проблема в том, что моя действующая кнопка действия находится в отдельном классе nsobject. И мой вид iiimage в одном контроллере представления. Что я сделал?. Я просто вызываю представление uiimage диспетчера представлений в класс nsobject, и я делаю поворот изображения.

Но его сбой, когда я нажимаю кнопку завершения.

Вот мой код в вид контроллера:

lazy var ctDataPicker = CTDataPickerplayer() 
     @IBOutlet weak var sportsDropImage: UIImageView! 

      @IBOutlet weak var hobbiesDropImage: UIImageView! 

     override func viewDidLoad() { 
       super.viewDidLoad() 

       ctDataPicker.hobimage? = hobbiesDropImage as UIImageView! 
       ctDataPicker.spoimage? = sportsDropImage as UIImageView! 



      } 

extension CricketFanViewController:UITextFieldDelegate{ 

    func textFieldDidBeginEditing(textField: UITextField) { 


     selectedText = textField 

     if textField == Experience { 

     hobbiesDropImage.transform = CGAffineTransformMakeRotation(3.14) 
     sportsDropImage.transform = CGAffineTransformMakeRotation(0.0) 


      ctDataPicker = CTDataPickerplayer() 
      let indexPos = Hobbeies.indexOf(Experience.text!) ?? 0 
      ctDataPicker.showPicker(self, inputText: textField, data: Hobbeies,selectedValueIndex: indexPos) 
     } 
     else if textField == playedTeam{ 


     hobbiesDropImage.transform = CGAffineTransformMakeRotation(0.0) 
     sportsDropImage.transform = CGAffineTransformMakeRotation(3.14) 


      ctDataPicker = CTDataPickerplayer() 
      let indexPos = Sports.indexOf(playedTeam.text!) ?? 0 
      ctDataPicker.showPicker(self, inputText: textField, data: Sports, selectedValueIndex: indexPos) 
     } 
    } 
} 

Мой NSObject код класса:

import Foundation 

    import SwiftCountryPicker 

    class CTDataPickerplayer: NSObject, UIPickerViewDataSource, UIPickerViewDelegate { 

     var dataPicker: UIPickerView! 
     var inputText:UITextField! 
     var parent:UIViewController! 
     var pickerData: [String]! 
     var feetStr = String() 
     var inchStr = String() 


     var hobimage:UIImageView! 
     var spoimage:UIImageView! 
    func showPicker(parent:UIViewController,inputText:UITextField, data: [String], selectedValueIndex: Int){ 

     self.inputText = inputText 
     self.parent = parent 
     self.pickerData = data 

     if dataPicker == nil { 
      dataPicker = UIPickerView(frame: CGRectMake(0,0,parent.view.frame.size.width, 216)) 
      dataPicker.backgroundColor = UIColor.whiteColor() 
      dataPicker.dataSource = self 
      dataPicker.delegate = self 
      dataPicker.selectRow(selectedValueIndex, inComponent: 0, animated: true) 
      _selectedValue = self.pickerData.count > 0 ? self.pickerData[selectedValueIndex] : "" 
     } 
     inputText.inputView = dataPicker 

     // ToolBar 
     let toolBar = UIToolbar() 
     toolBar.barStyle = .Default 
     toolBar.translucent = true 
     toolBar.tintColor = UIColor(hex: "B12420") 
     toolBar.backgroundColor = UIColor.whiteColor() 
     toolBar.sizeToFit() 

     // Adding Button ToolBar 
     let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: #selector(CTDataPickerplayer.doneClick)) 
     let spaceButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil) 
     let cancelButton = UIBarButtonItem(title: "Cancel", style: .Plain, target: self, action: #selector(CTDataPickerplayer.cancelClick)) 
     toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
     toolBar.userInteractionEnabled = true 
     inputText.inputAccessoryView = toolBar 

    } 


     func doneClick() { 


      hobimage.transform = CGAffineTransformMakeRotation(0.0) 
      spoimage.transform = CGAffineTransformMakeRotation(0.0) 

    } 

Мое приложение аварии в кнопку Готово действия кода здесь:

hobimage.transform = CGAffineTransformMakeRotation(0.0) spoimage.transform = CGAffineTransformMakeRotation(0.0)

+0

Где вы инициализировали 'hobimage'? – Santosh

+0

Инициализировать ?? .. В классе nsobject или ?? – mack

+0

Лучше опубликуйте свой полный код с отдельным именем класса, как вы определили. – Santosh

ответ

1

Вы сделали hobimage и spoimage "неявно развернутые варианты (тип UIImageView!.)

Подумайте об операторе ! как о «аварийном, если нет». Каждый раз, когда вы ссылаетесь на неявно разворачиваемую опцию, и она равна нулю, вы терпите крах.

Поэтому либо hobimage, либо spoimage, вероятно, ноль. Вероятно, вы забыли подключить выходы в построителе интерфейса.

+0

hobimage, spoimage Я не могу сохранить как iboutlet в своем классе nsobject – mack

+0

Отредактируйте свой вопрос, чтобы показать метод init вашего класса NSObject, так как а также код, который создает экземпляр этого класса и вызывает метод doneClick –

+0

, я обновил .... – mack

0

Проблема с вашим ctDataPicker, вы его инициализации лениво в верхней части vc и назначая ваших imageViews в viewDidLoad. Теперь вы снова intiailizing же объект в extension CricketFanViewController:UITextFieldDelegate

  ctDataPicker = CTDataPickerplayer() 
      let indexPos = Sports.indexOf(playedTeam.text!) ?? 0 
      ctDataPicker.showPicker(self, inputText: textField, data: Sports, selectedValueIndex: indexPos) 

Пожалуйста, проверьте здесь и решить, что ваше требование.

+0

Я изменил это, но все равно сбой на той же строке – mack

+0

@Santhosh, я получаю такой же сбой. Можете ли вы рассказать мне, как я могу назвать это представление изображения в своем контроллере представления своим классом nobject? – mack

+0

Просто удалите эту строку 'ctDataPicker = CTDataPickerplayer()' – Santosh

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

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