如何在iOS项目中读取Realm变量的值?

时间:2017-07-28 21:08:58

标签: ios swift realm

我刚刚开始编码。我正在使用Swift创建一个iOS应用程序,即使退出应用程序也需要能够存储两个变量。为此,我正在使用Realm。我能够写出这两个变量,但是当我尝试阅读它们时,我无法构建我的项目。

我尝试了许多tutorats,但每次尝试将它们应用于我的问题时都失败了。

这是我的Realm课程:

class Info: Object {
    dynamic var name  = ""
    dynamic var gender  = ""
}

如何在ViewController中读取这两个变量的值?

当我尝试读取变量时,行上有错误

guard let info = realm.objects(Info.self).first else {return}
我的ViewController的

import UIKit
import RealmSwift

class SettingsViewController: UIViewController {

    let realm = try! Realm()
    guard let info = realm.objects(Info.self).first else {return}
    let name = info.name
    let gender = info.gender

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

1 个答案:

答案 0 :(得分:2)

您可以像这样访问if(isset($_COOKIE['tmp_user_id'])) { $user_id = $_COOKIE['tmp_user_id']; } 个变量:

Realm

但是,如果您不打算在存储上存储更复杂的数据,我建议您只使用let realm = try! Realm() guard let info = realm.objects(Info.self).first else {return} let name = info.name let gender = info.gender ,对于这样一个简单的任务,它更容易使用。

如果要存储字符串文字,还应将UserDefaults更改为正确的« »符号。

对于问题的编辑部分: "必须在guard let info = realm.objects(Info.self).first else {return}函数中发生。在实际初始化类之前,您无法访问viewDidLoad,这是您的类的实例属性,因此会出现错误。如果您需要info作为实例属性,请将其初始化为可选项并在realm内访问它。

第一个选项 - 如果您只需要访问viewDidLoad内的info

viewDidLoad

第二个选项 - 如果您需要在类实例中的任何位置访问class SettingsViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let realm = try! Realm() guard let info = realm.objects(Info.self).first else {return} let name = info.name let gender = info.gender } }

info

如果这是您的初始视图控制器,则将域声明为实例属性可能会有问题,因为您的类可能在class SettingsViewController: UIViewController { let realm = try! Realm() var info: Info? override func viewDidLoad() { super.viewDidLoad() info = realm.objects(Info.self).first else {return} let name = info.name let gender = info.gender } } 函数执行完毕之前被实例化,因此您的application(didFinishLaunchingWithOptions)将不会在您尝试在realm schema中访问它时,请正确设置。如果是这种情况,只需在SettingsViewController内移动let realm = try! Realm()行。

相关问题