在 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 您可以执行以下操作:
- 创建 属性
let medicines = [(String, String?)]()
- 当药物到达时,用药物填充该数组。所以在这些药物之后看起来像这样
[("Medicine1", nil), ("Medicine2", nil),...]
- 当数量到达时遍历
medicines
并将数量添加到数组中,这样之后它看起来像这样:[("Medicine1", "Quantity1"), ("Medicine2", "Quantity2"),...]
- 使用
medicines
数组填充您的 table。创建一个重新加载 table: 的方法
像这样:
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++
}
}
}
- 每当您收到有关数量或数据的消息时,请致电
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]
}
}
在我的应用程序中,我使用 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 您可以执行以下操作:
- 创建 属性
let medicines = [(String, String?)]()
- 当药物到达时,用药物填充该数组。所以在这些药物之后看起来像这样
[("Medicine1", nil), ("Medicine2", nil),...]
- 当数量到达时遍历
medicines
并将数量添加到数组中,这样之后它看起来像这样:[("Medicine1", "Quantity1"), ("Medicine2", "Quantity2"),...]
- 使用
medicines
数组填充您的 table。创建一个重新加载 table: 的方法
像这样:
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++
}
}
}
- 每当您收到有关数量或数据的消息时,请致电
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]
}
}