【发布时间】:2015-03-10 22:44:46
【问题描述】:
我是 swift 新手,在使用 CoreData 时遇到了问题,我正在寻找一种方法来简化获取和写入值,特别是能够使用类似于以下内容的方式编写它们:
entity.attribute = variable
并使用类似于以下内容的方式检索它们:
variable = entity.attribute
我有一个名为“Studio”的实体,其属性名为“name”(字符串)。 我创建了一个 NSManagedObject 子类 (Studio.swift) 并将该类更新为“testapp.Studio”。
在我下面的示例代码中,IBAction saveData 会将 studioBox.text 写入 CoreData,但是 IBAction 更新会引发一些错误。
var Studio = getStudioData()
模式变量绑定不能出现在表达式中
nameLabel.text = Studio.name
“Studio.Type”没有名为“name”的成员
最后在 getStudioData 函数中:
return studio
“NSArray”不是“Studio”的子类型
下面是我的完整代码:
import UIKit
import CoreData
class ViewController: UIViewController {
@IBOutlet weak var studioBox: UITextField!
@IBOutlet weak var nameLabel: UILabel!
@IBAction func saveData(sender: AnyObject) {
var info: String = studioBox.text!
var Studio = dbconnect()
Studio.name = info as String
}
@IBAction func Update(sender: AnyObject) {
var info: String =
var Studio = getStudioData()
nameLabel.text = Studio.name
}
func getStudioData() -> Studio {
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let request = NSFetchRequest(entityName: "Studio")
request.returnsObjectsAsFaults = false
let result = managedContext.executeFetchRequest(request, error: nil)!
let studio = result
return studio
}
func dbconnect () -> Studio {
let appDelegate =
UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let entityDescription = NSEntityDescription.entityForName("Studio", inManagedObjectContext: managedContext)
let studio = Studio(entity: entityDescription!, insertIntoManagedObjectContext: managedContext)
return studio
}
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.
}
}
【问题讨论】: