核心数据问题Swift
问题描述:
你好,我目前正在使用一个Swift教程,它使用旧版本的Swift,我不能跟着这个,因为我相信Swift的新版本中语法已经改变。核心数据问题Swift
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var context:NSManagedObjectContext = appDel.managedObjectContext
var newUser = NSEntityDescription.insertNewObjectForEntityForName("users", inManagedObjectContext: context) as NSManagedObject
newUser.setValue("Joe", forKey: "username")
newUser.setValue("pass", forKey: "password")
do {
try context.save()
} catch let error {
print("Couldn't save user data")
print(error)
}
let request = NSFetchRequest(entityName: "Users")
request.returnsObjectsAsFaults = false
// var results = context.executeFetchRequest(request)
do {
var results =
try context.executeFetchRequest(request)
results = results as! [NSManagedObject]
} catch let error as NSError {
print(error)
}
for result: AnyObject in results {
print(results)
}
}
我收到的错误是对结果的行的结果做:AnyObject的结果和错误是未解决的标识符“结果”,这是给我的印象中,这应该是地方宣布为变量,因为它目前尚未解决,但我无法弄清楚如何解决这个问题,任何帮助将不胜感激,谢谢!
答
do {
var results = try context.executeFetchRequest(request)
results = results as! [NSManagedObject]
} catch let error as NSError {
print(error)
}
for result: AnyObject in results {
print(results)
}
results
仅具有do
块有内部范围。你需要移动阵列的处理do
内:
do {
var results = try context.executeFetchRequest(request)
results = results as! [NSManagedObject]
for result in results {
print(results)
}
} catch let error as NSError {
print(error)
}
也没有必要通过铸塑AnyObject
丢失信息。
答
随着新API的反对CoreData(在雨燕3.0),你应该做的:
let request = NSFetchRequest<Users>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
var results =
try context.fetch(request)
// `results` will here be [Users]
} catch let error as NSError {
print(error)
}
取的新的签名是fetch<T : NSFetchRequestResult>(_ request: NSFetchRequest<T>) throws -> [T]
其中T
是在<HERE>
提供的相同
(前
NSFetchRequest<Users>
)。啊,是的,我现在明白我要去哪里错了,谢谢你,但我仍然无法得到这个工作,输出没有显示任何东西,当它应该显示它从数据库收到的值:s –啊,你的实体创建和抓取时,名称不同 - “用户”和'Users'。理想情况下,这只是模型编辑器和代码中的“用户”。我很惊讶,不会引发异常。 – jrturton
我也是,多谢队友,奇怪...我改变了一个相应的,它似乎仍然没有打印出来的价值:( –