核心数据问题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丢失信息。

+0

(前NSFetchRequest<Users>)。啊,是的,我现在明白我要去哪里错了,谢谢你,但我仍然无法得到这个工作,输出没有显示任何东西,当它应该显示它从数据库收到的值:s –

+0

啊,你的实体创建和抓取时,名称不同 - “用户”和'Users'。理想情况下,这只是模型编辑器和代码中的“用户”。我很惊讶,不会引发异常。 – jrturton

+0

我也是,多谢队友,奇怪...我改变了一个相应的,它似乎仍然没有打印出来的价值:( –

随着新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>提供的相同