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

标签 ios swift realm

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

我尝试了很多教程,但每次尝试将它们应用到我的问题时都失败了。

这是我的 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.
    }
}

最佳答案

您可以访问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功能。您无法访问 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
    }

}

如果这是您的初始 View Controller ,将 Realm 声明为实例属性可能会出现问题,因为您的类可能在 application(didFinishLaunchingWithOptions) 之前实例化。函数完成执行,因此你的 realm schema当您尝试在 SettingsViewController 中访问它时,将无法正确设置.如果是这种情况,只需移动 let realm = try! Realm() 行即可里面viewDidLoad .

关于ios - 如何读取 iOS 项目中 Realm 变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382449/

相关文章:

ios - 重定向到另一个 View Controller

ios - Alamofire HTML 请求在每个应用程序安装时仅有效一次

ios - View转到Table View,表格不起作用

swift - 使用 RKValueTransFormer 将 NSArray 转换为 RLMArray 无法将 outputValue 转换为 AutoreleasingUnsafeMutablePointer<AnyObject?>

android - 如何在 API 级别 18 中使用存储在 KeyStore 中的 key 的加密 Realm

swift - 如何更改 Realm 单例属性值

iOS11 ARKit : Can ARKit also capture the Texture of the user's face?

ios - 在动态 UITableView 原型(prototype)中访问行高

swift - 协议(protocol) : Cannot assign to 'X' in 'Y' in Swift

ios - 添加一个 subview (ShareView),但触摸其上的按钮时没有任何反应