2016-01-29 3 views
0

У меня есть alertController с текстовым полем. Пользователь вводит свои данные в textField и нажимает «set». Затем он должен создать элемент и сохранить введенный текст как мой атрибут, на который он установлен. Однако при создании элемента textField пропускает ноль. Он не сохраняется до тех пор, пока элемент не будет снова открыт и не сохранен (подсказка alertController для запроса данных в текстовом поле). Почему это не спасает его в первый раз?AlertController не сохраняет textField текст при сохранении, только редактирование

SaveButton нажата:

@IBAction func saveButton(sender: AnyObject) { 
    if (item?.slminqty == nil) { 
    let alert = UIAlertController(title: "Minimun Qty.", message: "Please set minimun qty. for pantry.", preferredStyle: UIAlertControllerStyle.Alert) 

     alert.addTextFieldWithConfigurationHandler { (textField: UITextField!) -> Void in 
     textField.placeholder = "Minimun Qty." 
     textField.keyboardType = .NumbersAndPunctuation 
     textField.clearButtonMode = UITextFieldViewMode.WhileEditing 
    } 

    alert.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default, handler: {saveitem}())) 
    alert.addAction(UIAlertAction(title: "Set", style: UIAlertActionStyle.Default, handler: {(action) -> Void in 
     let textField = alert.textFields![0].text! 
     self.item?.slminqty = textField 

     self.saveitem(self)})) 

     self.presentViewController(alert, animated: true, completion: nil) 

    }else{ 

     if item != nil { 
      edititems() 

     } else { 
      createitems() 
     } 
     print(item?.slminqty) 

     dismissVC() 
    } 

    } 

Сохранить функцию:

func saveitem(sender: AnyObject) { 

    if item != nil { 
     edititems() 

    } else { 
     createitems() 
    } 
    print(item?.slminqty) 

    dismissVC() 
} 

Создать функцию:

func createitems() { 

    let entityDescription = NSEntityDescription.entityForName("List", inManagedObjectContext: moc) 

    let item = List(entity: entityDescription!, insertIntoManagedObjectContext: moc) 

    item.slitem = slitem.text 
    item.sldesc = sldesc.text 
    item.slqty = slqty.text 
    item.slprice = slprice.text 
    item.slist = true 
    item.slcross = false 

    if slitem.text == nil{ 
     createitems() 

    }else{ 
     edititems() 
    } 

    do { 
     try moc.save() 
    } catch _ { 
     return 
    } 
} 

Функция редактирования:

func edititems() { 
    item?.slitem = slitem.text! 
    item?.sldesc = sldesc.text! 
    item?.slqty = slqty.text! 
    item?.slprice = slprice.text! 

    do { 
     try moc.save() 
    } catch { 
     return 
    } 
} 

Если оба создания и редактирования одинаковы (за исключением slcross и slist), почему он не сохраняет данные при создании элемента?

ответ

1

Редактировать см. Мой pull reqest, я внесла некоторые изменения в ваш код. наряду с некоторыми комментариями.

Я думаю, что проблема в этой строке:

self.item?.slminqty = textField 

self.item может быть равна нулю. вы должны убедиться, что первый элемент не равен нулю.

вы можете попытаться создать элемент, если это нуль. например:

if self.item == nil { 
    //create item. 
    self.acreateItems() 
    // after creating the item just test its value. 
    print("item was nil so we just created it.\nIts value not is \(self.item)") 
} 
self.item?.slminqty = textField 
+0

Как я могу это сделать в мире? Это единственный способ заставить код работать до сих пор. Я понятия не имею, как убедиться, что элемент не ноль. Я не понимаю, почему он работает для редактирования элемента, но не в его создании? Не могли бы вы объяснить его немного дальше и что я должен делать для его работы? –

+0

См. Мой обновленный ответ. – Ismail

+0

Прошу прощения. Это все равно имеет тот же эффект, что и без оператора if. Он печатает «item was nil, поэтому мы просто создали его». но все равно возвращает nil для slminqty при создании, но возвращает его правильно при редактировании. –