在 WatchOS 中使用解析来准备行

Using parse for preparing rows in WatchOS

在我的应用程序中,我使用 Parse SDK 从数据库中获取药物列表和数量,并将其通过 iPhone 传递给手表。我在手表上实现了 WillActivate() 中的两个单独的 sendMessages :

let iNeedMedicine = ["Value": "Query"]

    session.sendMessage(iNeedMedicine, replyHandler: { (content:[String : AnyObject]) -> Void in

        if let medicines = content["medicines"]  as? [String] {
            print(medicines)
            self.table.setNumberOfRows(medicines.count, withRowType: "tableRowController")
            for (index, medicine) in medicines.enumerate() {


                let row = self.table.rowControllerAtIndex(index) as? tableRowController
                if let row1 = row {

                        row1.medicineLabel.setText(medicine)
                }
            }
        }
        }, errorHandler: {  (error ) -> Void in
            print("We got an error from our watch device : " + error.domain)
    })

第二个:

    let iNeedAmount = ["Value" : "Amount"]
    session.sendMessage(iNeedAmount, replyHandler: { (content:[String : AnyObject]) -> Void in

        if let quantity = content["quantity"]  as? [String] {
            print(quantity)
            self.table.setNumberOfRows(quantity.count, withRowType: "tableRowController")
            for (index, quant) in quantity.enumerate() {


                let row = self.table.rowControllerAtIndex(index) as? tableRowController
                row!.amountLabel.setText(quant)
            }
        }
        }, errorHandler: {  (error ) -> Void in
            print("We got an error from our watch device : " + error.domain)
    })

我得到的是:Problem。是因为两条不同的消息吗?

要同时显示药物和数量 table 您可以执行以下操作:

  1. 创建 属性 let medicines = [(String, String?)]()
  2. 当药物到达时,用药物填充该数组。所以在这些药物之后看起来像这样 [("Medicine1", nil), ("Medicine2", nil),...]
  3. 当数量到达时遍历 medicines 并将数量添加到数组中,这样之后它看起来像这样:[("Medicine1", "Quantity1"), ("Medicine2", "Quantity2"),...]
  4. 使用 medicines 数组填充您的 table。创建一个重新加载 table:
  5. 的方法

像这样:

func reloadTable() {
    self.table.setNumberOfRows(medicines.count, withRowType: "tableRowController")
    var rowIndex = 0
    for item in medicines {
        if let row = self.table.rowControllerAtIndex(rowIndex) as? tableRowController {
            row.medicineLabel.setText(item.0)
            if let quantity = item.1 {
                row.quantityLabel.setText(quantity)
            }
            rowIndex++
        }
    }
}
  1. 每当您收到有关数量或数据的消息时,请致电 reloadTable()

这只是一个解释这个想法的原始例子。你必须小心保持药物和数量同步。特别是当用户向下滚动时加载更多数据时。

要将消息中的数据填充到您的数组中,您可以定义两个函数:

func addMedicines(medicineNames: [String]) {
    for name in medicineNames {
        medicines.append((name, nil))
    }
}

func addQuantities(quantities: [String]) {
    guard medicines.count == quantities.count else { return }
    for i in 0..<medicines.count {
        medicines[i].1 = quantities[i]
    }
}