【问题标题】:Realm Results array's count alway equal 1领域结果数组的计数始终等于 1
【发布时间】:2017-10-05 07:17:58
【问题描述】:

我正在开发一个 QRCode 扫描仪应用程序,逻辑是当设备扫描代码时,它将该代码的信息保存到 Realm 中,用户可以在 TableView 中看到它们。

但是现在我面临一个问题,即使我扫描了很多次,结果数组也总是返回一个元素。

下面是我保存二维码对象的代码:

self.barcodesHandler = { barcodes in
        if !self.dispatched {
            self.dispatched = true
            for barcode in barcodes {
                print("Barcode found: type=" + barcode.type + " value=" + barcode.stringValue)
                let barcodeStringArray  = barcode.stringValue.components(separatedBy: ": ")
                let infoVC = ANSProductDetailViewController()
                self.product = ANSProductModel(name: barcodeStringArray[1], manufacturer: barcodeStringArray[2], registerLocation: barcodeStringArray[0], detailUrl: barcodeStringArray[3])
                infoVC.product = self.product
                DispatchQueue.main.async(execute: {
                    infoVC.hidesBottomBarWhenPushed = true
                    self.navigationController?.pushViewController(infoVC, animated: true)
                })
                break
            }
            self.product.saveToLocal()
        }
    }
//ANSProductModel save method, self = ANSProductModel
func saveToLocal() {
    Realm.execute { (realm) in
        realm.add(self, update: true)
        print("Product saved")
    }
}

以及在 TableView 中检索它们的代码:

var productList: Results<ANSProductModel>!

override func viewDidLoad() {
    super.viewDidLoad()
    let realm = try! Realm()
    productList = realm.objects(ANSProductModel.self)
    tableView.register(UINib(nibName: "ANSProductHistoryCell", bundle: nil), forCellReuseIdentifier: "ANSProductHistoryCell")
    // Do any additional setup after loading the view.
}

请任何人都可以帮助我,我已经尝试了很多,但仍然坚持下去。非常感谢!

【问题讨论】:

  • Realm.execute() 不是 Realm API 的一部分。您能否发布所有相关代码、您正在使用的模型对象的定义以及您已编写或正在使用的 Realm 上的任何扩展?
  • Realm.excute() 只是一种包装方法,我已经尝试使用 sortedbyKeyPath 方法并且它有效。但是,当我尝试保存另一个模型时,此问题再次出现。
  • 再次,请提供所有相关代码。我们甚至还不知道您的模型是如何定义的。如果您不提供代码,我们将无法对其进行故障排除。

标签: ios swift uitableview realm nsarray


【解决方案1】:

基于Real Swift 2.10.2最新文档(https://realm.io/docs/swift/latest/),保存一直是一样的,你可以试试这种方式吗?

func saveToLocal() {
    // Get the default Realm
    let realm = try! Realm()

    // Persist your data easily
    try! realm.write {
        realm.add(self)
        print("Product saved")
    }
}

编辑:也许您正确保存了新数据,请确保在保存后重新加载您的UITableView

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多