您好我目前正在使用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和错误是未解析的标识符'结果'这给我的印象是,这应该在某处作为变量声明,因为它目前尚未解决,但我无法弄清楚如何解决这个问题,非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
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
来丢失信息。
答案 1 :(得分:0)
使用针对CoreData的新API(在Swift 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>
)