核心数据问题Swift

时间:2016-09-20 11:13:54

标签: swift core-data swift3

您好我目前正在使用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和错误是未解析的标识符'结果'这给我的印象是,这应该在某处作为变量声明,因为它目前尚未解决,但我无法弄清楚如何解决这个问题,非常感谢任何帮助,谢谢!

2 个答案:

答案 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>