【发布时间】: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