2017-10-05 40 views
0

我正在研究QRCode扫描器应用程序,逻辑是当设备扫描代码时,它会将该代码的信息保存到Realm中,并且用户可以在TableView中看到它们。Realm Results array的总数一直等于1

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

下面是我救了QR码的目标代码:

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. 
} 

请任何人都可以帮助我,我已经尝试了很多,但还是被卡住跟他们。非常感谢 !

+0

'Realm.execute()'不是Realm API的一部分。你能发布_all_相关代码,你正在使用的模型对象的定义,以及你已经编写或正在使用的Realm上的任何扩展吗? – AustinZ

+0

Realm.excute()只是一个包装方法,我试过使用sortedbyKeyPath方法,它工作。但是,当我试图挽救另一个模型时,这个问题又出现了。 –

+0

请再次提供_all_相关代码。我们甚至不知道你的模型是如何定义的。如果你不提供你的代码,我们不能排除故障。 – AustinZ

回答

0

根据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