【问题标题】:Load all objects into Results variable (Realm iOS)将所有对象加载到 Results 变量中(Realm iOS)
【发布时间】:2020-07-13 14:48:52
【问题描述】:

我正在尝试将我输入到 Realm 数据库中的所有预加载数据并在我的应用程序中使用它。我遇到的问题是我无法将所有对象加载到我的自定义类型的结果变量中。我的预加载数据库中有 530 个条目,但它们都没有显示在视图控制器中。

这些数据存储在 /Database/streetListings.realm

import UIKit
import RealmSwift

class StreetListing: Object {
  
  @objc dynamic var houseNumber: String?
  @objc dynamic var streetName: String = ""
  @objc dynamic var trashDay: String = ""
  
  convenience init(houseNumber: String?, streetName: String, trashDay: String) {
    self.init()
    self.houseNumber = houseNumber
    self.streetName = streetName
    self.trashDay = trashDay
  }
}

import UIKit
import RealmSwift

class ViewController: UIViewController {
  
  var realm: Realm!
  var streetListings: Results<StreetListing>?
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    let realmPath = Bundle.main.url(forResource: "streetListings", withExtension: "realm")!
    let realmConfiguration = Realm.Configuration(fileURL: realmPath, readOnly: true)
    realm = try! Realm(configuration: realmConfiguration)
    streetListings = realm.objects(StreetListing.self)
  }
}
(lldb) po realmPath
▿ file:///Users/raz/Library/Developer/CoreSimulator/Devices/3A4F3C1A-9C15-4AF0-B211-5125E3843075/data/Containers/Bundle/Application/B1331B06-EDFE-494C-A170-7FDB1B2CA291/NorthTrash.app/streetListings.realm
  - _url : file:///Users/raz/Library/Developer/CoreSimulator/Devices/3A4F3C1A-9C15-4AF0-B211-5125E3843075/data/Containers/Bundle/Application/B1331B06-EDFE-494C-A170-7FDB1B2CA291/NorthTrash.app/streetListings.realm

(lldb) print realmConfiguration
(RealmSwift.Realm.Configuration) $R32 = {
  _syncConfiguration = nil
  _path = "/Users/raz/Library/Developer/CoreSimulator/Devices/3A4F3C1A-9C15-4AF0-B211-5125E3843075/data/Containers/Bundle/Application/B1331B06-EDFE-494C-A170-7FDB1B2CA291/NorthTrash.app/streetListings.realm"
  _inMemoryIdentifier = nil
  encryptionKey = nil
  readOnly = true
  schemaVersion = 0
  migrationBlock = nil
  deleteRealmIfMigrationNeeded = false
  shouldCompactOnLaunch = nil
  maximumNumberOfActiveVersions = nil
  customSchema = nil
  disableFormatUpgrade = false
}


(lldb) po streetListings
▿ Optional<Results<StreetListing>>
  ▿ some : Results<StreetListing> <0x7fbd2e607140> (

)
    - rlmResults : RLMResults<StreetListing> <0x7fbd2e607140> (

)

如果有人能帮我解决这个问题,那就太好了。谢谢!

【问题讨论】:

  • 如果你没有得到有用的答案又等不及了,也许可以考虑通过制作一个小项目来重现问题并将其添加到你的 Github 以便我们可以使用它。
  • 我没有看到你的代码有什么问题。事实上,几乎可以复制粘贴它,因为它对我来说是正确的。路径可能有问题?除此之外 - 看起来不错。
  • 我认为这与 StreetListings 的自定义对象类有关。我检查数据库是否为空,但不是。但是我的 变量是空的...

标签: ios swift database realm


【解决方案1】:

我也参与了 Realm Project。 这是加载所有对象的简单提示。

 let realm = try? Realm()
       let personData = realm?.objects(Person.self)
      //write code for loading personData
    

【讨论】:

  • 这与问题中的代码几乎相同。
【解决方案2】:

加载大量对象可能需要一些时间。延迟后尝试访问streetListings。不知道为什么你需要数据库是只读的。如果没有,您可以使用 NotificationToken 来监听对领域数据库所做的更改。

【讨论】:

  • 数据库需要只读,因为用户会查找 streetListings。他们不应该有更改数据库的权限。也许还有另一种不使用 Realm 来查找数据的方法......
  • 对象不多; 530不算什么。事实上,它是 53,000,它仍然会在毫秒内加载,因为 Realm 对象是延迟加载的。
【解决方案3】:

我能够让它工作。我将自定义类从“streetListings”更改为“StreetListings”。还创建了一个全新的 Xcode 项目并传输了所有现有文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多