如何从核心数据中的关系中获取值(swift)

时间:2017-05-02 18:50:51

标签: swift xcode core-data core-data-migration

我有一个名为“Users”的实体,其中包含2个名为“username”和“password”的属性。

我有另一个名为“Info”的实体,其中有4个属性名为“avatar”,“level”,“loss”,“win”。

我与名为的“用户”实体建立了关系 “用户信息” 目的地:“信息” 反向:“userDetails”

我与名为的“信息”实体建立了关系 “为userDetails” 目的地:“用户” 反向:“userInfo”

这是我现在的代码:

@IBAction func loginButtonPressed(_ sender: UIButton) {

    // getting the inputs from the user
    let username = usernameField.text!
    let userPassword = passwordField.text!

    // creating a request to fetch the results for the users
    let context = appDelegate.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
    request.returnsObjectsAsFaults = false



    // now getting all the results
    do
    {
        // saving results in results
        let results = try context.fetch(request)


        // now checking if there is any results
        if results.count > 0
        {
            // creating a for loop to go through the results
            for result in results as! [NSManagedObject]
            {
                // checking if username and password match
                if username == (result.value(forKey: "username") as? String)! && userPassword == (result.value(forKey: "password") as? String)!
                {
                    // if they do set "isLoggedIn" to true
                    UserDefaults.standard.set(true, forKey:"isLoggedIn")
                    UserDefaults.standard.synchronize()


                    // Now saving the username and info of the user to the main viewController to display the users data later

                    // I NEED TO SAVE FROM THE RELATIONSHIP DATA HERE

                    // dismissing this view to go to the main view
                    self.dismiss(animated: true, completion: nil)
                }
                else
                {
                    // if username and passwords dont match then display it to the user.
                    alertMessage(userMessage: "Login failed username or password do not match!")
                }
            }
        }
        else
        {
            // if no results then display error message
            alertMessage(userMessage: "Login Failed: No users registered!")
        }
    }
    catch
    {
        // catch
    }
}

在检查用户名和密码是否正确后,我需要将该用户名和密码的关系数据存储到4个变量中。命名:胜利,失败,等级和头像。

我对如何从关系中获取正确的数据感到困惑

我尝试过使用“result”变量试图获得这个但没有运气。

由于

1 个答案:

答案 0 :(得分:0)

通常会创建代表实体的类,而不是直接将实体作为NSManagedObjects使用,所以这看起来有点奇怪。但是你应该可以使用setValueForKey:

result.setValue(/* whatever */, forKey: "userInfo.avatar")