已经为核心数据代码设置了一个类来保存和检索,然后在第一个视图控制器上有一个表单输入比萨饼的价格和名称,一个保存按钮,用于从dbmanager链接保存方法,和一个查看按钮,用于查看表中保存的数据。
现在我不确定我的保存方法是否正确,但我还没有错误。 但我不知道如何在第二个视图控制器标签的表中显示输入的数据。
这是我对IOS的第一次尝试
第一个视图控制器:
import UIKit
import CoreData
class ViewController: UIViewController {
@IBOutlet weak var price: UITextField!
@IBOutlet weak var name: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func save(_ sender: Any) {
let db = DatabaseManager()
db.addRow(name: name.text!, price: price.text!)
}
@IBAction func view(_ sender: Any) {
let db = DatabaseManager()
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if segue.identifier == "mySegue" {
let controller : allPizzas = segue.destination as! allPizzas
下面的这一行说明不能将[string]类型的值赋给字符串
controller.pizzaTxt = db.retrieveRows()
}
}
`enter code here`// }
func showMessage(msg: String)
{
let alert = UIAlertController(title: "Message", message: msg, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
}
第二个视图控制器:
import UIKit
import CoreData
class allPizzas: UIViewController {
//label to display the pizzas
@IBOutlet weak var output: UILabel!
var pizzaTxt : String = ""
override func viewDidLoad() {
super.viewDidLoad()
output.text = pizzaTxt;
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
数据库管理员:
import UIKit
import CoreData
class DatabaseManager: NSObject {
var pizzas: [NSManagedObject] = []
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
func addRow( name:String, price:String) {
// set the core data to access the Student Entity
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return }
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "Pizzas", in: managedContext)
let pizza = NSManagedObject(entity: entity!, insertInto: managedContext)
pizza.setValue(name, forKey: "name")
pizza.setValue(price, forKey: "price")
do {
try managedContext.save()
pizzas.append(pizza)
//showMessage(msg: "Information is added")
}
catch {
//showMessage(msg: "Error While Adding to Core Data")
}
}
func retrieveRows() -> [String] { // return array of Strings
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return [""]}
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Pizzas")
do {
pizzas = try managedContext.fetch(fetchRequest)
}
catch{
// show something
}
var msg : [String] = []
var count = 0
for pizza in pizzas {
msg.append((pizza.value(forKeyPath: "name") as? String)!)
count += 1
}
msg = [String(count)]
return msg
}
}