在提交应用程序之前,我尝试解决了这一问题几天,所以就到这里了。我正在开发一个使用UserDefaults的应用程序,只需按一下按钮即可保存来自其他视图控制器的字符串,并在下一个视图控制器中将其传输为表格视图。但是,由于某些未知的原因,该应用程序可以在iPhone X(和iPhone XR)上完美运行,但是当我在其他iPhone型号上运行该应用程序时,它不会保存字符串并不会对按下按钮做出反应。这是我的代码:
// FirstViewController
@IBAction func buttonIsPressed(_ sender: Any) {
if var items = UserDefaults.standard.object(forKey: "items") as? [String]{
var newitems = textField.text!.components(separatedBy: CharacterSet(charactersIn: ", []()\n.:"))
print(items)
if newitems.contains(""){
newitems.removeAll { $0 == ""}
items.append(contentsOf: newitems)
UserDefaults.standard.set(items, forKey: "items")
}else{
let newitems = textField.text!.components(separatedBy: CharacterSet(charactersIn: ", []()\n.:"))
UserDefaults.standard.set(newitems, forKey: "items")
}
textField.text = ""
}
}
// SecondViewController
var scannedText: String = "Detected text can be edited here." {
didSet {
textView.text = scannedText
let str = scannedText.uppercased()
let allergens = UserDefaults.standard.array(forKey: "items") as! [String]
let string = str.components(separatedBy: CharacterSet(charactersIn: ", []()\n.:"))
print(string)
for allergen in allergens{
if string.contains(String(Substring(allergen))) == true {
print("I found the string \(allergen)")
allegenLabel.text = "Not safe"
allegenLabel.alpha = 1 //Make the label visible
allegenLabel.textColor = .red
// let attributedString = allergen.highlight([allergen], this: .red)
// textView.attributedText = attributedString
allergensFound.append(allergen)
print(allergensFound)
}
if string.contains(String(Substring(allergen))) == false {
allegenLabel.text = "Safe"
allegenLabel.alpha = 1 //Make the label visible
allegenLabel.textColor = UIColor.colorGreen
// table.reloadData()
}
}
}
}
请问我是否需要代码中的进一步说明。谢谢!
编辑:更确切地说,我正在创建一个代码,该代码将在字符串数组中找到一个字符串,然后使用AllegenLabel.text通知用户。整个应用程序分为不同的视图控制器。用户使用FirstViewController中的文本字段输入字符串,然后必须在SecondViewController中的另一个字符串数组中找到该字符串。由于某种原因,UserDefaults成功在我的手机上存储和检索了该字符串,但在其他设备上无法使用。例如,每当我单击FirstViewController中的“保存”按钮时,都必须存储一个字符串并在控制台中显示它,但是由于某些未知原因,它不起作用。抱歉,如果我不清楚
答案 0 :(得分:0)
我认为您可以尝试:
UserDefaults.standard.synchronize()
也许...