У меня есть 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), почему он не сохраняет данные при создании элемента?
Как я могу это сделать в мире? Это единственный способ заставить код работать до сих пор. Я понятия не имею, как убедиться, что элемент не ноль. Я не понимаю, почему он работает для редактирования элемента, но не в его создании? Не могли бы вы объяснить его немного дальше и что я должен делать для его работы? –
См. Мой обновленный ответ. – Ismail
Прошу прощения. Это все равно имеет тот же эффект, что и без оператора if. Он печатает «item was nil, поэтому мы просто создали его». но все равно возвращает nil для slminqty при создании, но возвращает его правильно при редактировании. –