[英]Swift 4 When button is pressed a second time following an error alert it doesn't work
我敢肯定,我的问题的答案非常简单,但似乎无法在线找到答案。 我可能措辞不好。
我正在创建一个用于数据收集且不会公开的应用程序,因此我正在使用Core Data来管理用户。 每个设备使用的用户不会超过几个。
当用户尝试使用已经存在的电子邮件创建新电子邮件时,会出现我想要的警报。 但是,当他们退出警报并尝试再次输入电子邮件时,该按钮将不起作用。
这是我的代码:
@IBAction func startSessionButtonPressed(_ sender: Any) {
// check email isn't already in use
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
if results.count > 0 {
for result in results as! [NSManagedObject] {
let email = result.value(forKey: "email") as? String
if email == inputField.text {
newUser = false
let alert = UIAlertController(title: "Error", message: "Email already in use!", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
}
}
}
} catch {
print(error)
}
if newUser {
let newUser = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)
newUser.setValue(inputField.text, forKey: "email")
newUser.setValue(1, forKey: "session")
newUser.setValue(0, forKey: "phraseNumber")
newUser.setValue(UIDevice.current.modelName, forKey: "device")
emails.append(inputField.text!)
sessions.append(1)
phraseNumbers.append(0)
myIndex = emails.index(of: inputField.text!)!
do {
try context.save()
print("saved")
} catch {
print(error)
}
performSegue(withIdentifier: "segue", sender: self)
}
}
我如何“重置”按钮,以便当用户尝试第二次或第三次响应时?
如果您写的电子邮件已经存在,请在您的按钮中单击,然后将newUser
设置为false
,因此您需要在发出提取请求之前将newUser
重置为true
。
@IBAction func startSessionButtonPressed(_ sender: Any) {
//Set newUser to true
newUser = true
// Now check email isn't already in use
...
}
建议:-您需要将NSPredicate
与NSFetchRequest
一起使用,而不是获取所有用户。
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.predicate = NSPredicate(format: "email == %@", inputField.text ?? "")
//Now just check that array is empty or not.
do {
let results = try context.fetch(request)
newUser = results.isEmpty
}
//Note:- If you check like this then there is no need to reset newUser variable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.