【问题标题】:SWIFT 2 : Core Data does not seem to workSWIFT 2:核心数据似乎不起作用
【发布时间】:2015-08-26 19:59:34
【问题描述】:

我正在学习关于 Swift 的优秀课程,但在 Core Data 方面似乎已经过时了。我想在核心数据中存储用户名和密码,但它似乎没有永久存储任何内容。为什么?

网上大部分教程都过时了。

  • 我在创建空项目并创建所需的实体和属性时单击了核心数据选项。

    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    
            let context:NSManagedObjectContext = appDel.managedObjectContext!
    

    让 newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context)

            newUser.setValue("Rober", forKey: "username")
    
            newUser.setValue("pass", forKey: "password")
    
    
    
    
    
            let request = NSFetchRequest(entityName: "Users")
    
            request.returnsObjectsAsFaults = false
    
            //request.predicate = NSPredicate(format: "username = %@", "kirsten")
    
        var results: [AnyObject]?
            do {
                results = try context.executeFetchRequest(request)
            } catch _ {
                results = nil
            }
    
            if results!.count > 0 {
    
                for result: AnyObject in results! {
    
                    if let username: String = result.valueForKey("username") as? String {
    
                        print(username)
    
                        result.setValue("kirsten", forKey: "username")
    
                        context.deleteObject(result as! NSManagedObject)
    
                        do {
                            try context.save()
                        } catch _ {
                        }
    
                    }
    
                }
    
    
            } else {
    
                print("No results")
    
            }
    

会是什么?是否有任何关于在 swift 2 中处理核心数据的更新教程? 谢谢

------------------ SOLUTION : Core Data 代码在 Swift 2 上运行良好 -------- ------------ 这一堆代码存储数据并显示它,如果您还想删除数据,只需取消注释行 // context.deleteObject(result as!NSManagedObject)

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let context:NSManagedObjectContext = appDel.managedObjectContext!


    let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context)



    newUser.setValue("Roberto", forKey: "username")

    newUser.setValue("pass", forKey: "password")





    let request = NSFetchRequest(entityName: "Users")

    request.returnsObjectsAsFaults = false

   //     request.predicate = NSPredicate(format: "username = %@", "kirsten")

    var results: [AnyObject]?
    do {
        results = try context.executeFetchRequest(request)
    } catch _ {
        results = nil
    }

    if results!.count > 0 {

        for result: AnyObject in results! {

            if let username: String = result.valueForKey("username") as? String {

                print(username)


              //  result.setValue("Angel", forKey: "username")

            //    context.deleteObject(result as! NSManagedObject)

                do {
                    try context.save()
                } catch _ {
                }

            }

            if let password: String = result.valueForKey("password") as? String {

                print(password)


                //  result.setValue("Angel", forKey: "username")

                //    context.deleteObject(result as! NSManagedObject)

                do {
                    try context.save()
                } catch _ {
                }

            }

        }


    } else {

        print("No results")

    }



}

【问题讨论】:

  • 你能贴出AppDelegate 中声明和初始化managedObjectContext 的部分吗?
  • 您的代码似乎正在插入一个新的Users 对象,然后获取所有Users 对象并删除它们。因此,当您保存上下文时,不会将任何内容写入存储。尝试删除 context.deleteObject(result as! NSManagedObject) 以查看内容是否正确保存。

标签: ios swift core-data mobile


【解决方案1】:

这是我的工作代码片段

使用 Swift 2.0 在 Core Data 中保存用户详细信息

//  Created by Ramdhan on 06/11/15.

import UIKit
import CoreData

class RegisterViewController: UIViewController {

    let managedObjectContext =
    (UIApplication.sharedApplication().delegate
        as! AppDelegate).managedObjectContext

    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var rePassword: UITextField!
    @IBOutlet weak var cell: UITextField!

    // MARK: - Controller life cycle stack

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }



    //MARK: Store user info on Device DB

    func saveUserInfoOnDB()
    {

        let entityObj =
        NSEntityDescription.entityForName("User",
            inManagedObjectContext: managedObjectContext)
        let userObj = User(entity: entityObj!,
            insertIntoManagedObjectContext: managedObjectContext)

        userObj.username = name.text
        userObj.password = password.text
        userObj.email_cell = cell.text

        if managedObjectContext.hasChanges
        {
            do
            {
                try managedObjectContext.save()
                let error: NSError? = nil

                if let err = error
                {
                    print("%@",err.localizedFailureReason)
                    print("Could not saved \(error), \(err.userInfo)")

                } else {
                    name.text = ""
                    password.text = ""
                    cell.text = ""
                    print("User info Saved")

                    performSegueWithIdentifier("loadManageAccountSegue", sender: nil)
                }
            }
            catch
            {
                let nserror = error as NSError
                NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
                abort()
            }
        }
    }
}

我的实体快照

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多