ios - Swift 4 在出现错误警报后第二次按下按钮时它不起作用
问题描述
我确定我的问题的答案很简单,但我似乎无法在网上找到答案。我可能措辞不好。
我正在创建一个用于数据收集且不会公开的应用程序,因此我使用 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
推荐阅读
- linux - 在规范文件中获取 RPM 文件位置
- math - 不能被给定素数整除的最大除数之和是多少
- docker - 使用 docker 运行和集成 Django 后端和 Angular 前端
- r - 我想使用 ggplot 在组条形图中更改组的顺序并拥有我的所有标签
- core-data - 使用 NSPredicate 根据数组属性过滤 CoreData 项列表
- c++ - 我怎样才能分割一个向量
并访问我需要的东西? - python - 尝试/排除错误处理无法识别 ValueError
- javascript - 对象类型转换 Javascript
- python - RecursionError:比较超过最大递归深度'
- terraform - terraform 后端输入变量