gpt4 book ai didi

ios - 从 iOS 应用程序将字典数据发送到 Apple Watch

转载 作者:行者123 更新时间:2023-11-28 08:29:44 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个名为“TicketDetailViewController”的页面,其中我有 3 个标签和一个 imageView,其中显示上一页的数据。现在我想要的是当我点击我的“sendtowatch”按钮时,我想发送显示的数据,即 3 个标签和一个 imageView 到我的苹果 watch ,在那里我也在它的 Storyboard中使用了 3 个标签和一个 imageView。问题是我正在使用 FMDB 数据库来存储和检索数据。现在在我的 IOS 应用程序中单击按钮,显示的数据将保存在数据库中,同时我还需要检索它以便 watch 可以接收我存储在数据库中的最新数据。我已经尝试了解决方案,但没有运气。

下面是我正在运行的应用程序页面的屏幕截图 screenshot for my running app

我的IOS端源码如下:

 @IBAction func sendToWatch(sender: AnyObject) {


let ticketDB = FMDatabase(path: databasePath as String)
if ticketDB.open()
{

let insertSQL = "INSERT INTO TICKET (image, ticket_category, ticket_type, date, time) VALUES ('\(display_image.image!)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')"

let result = ticketDB.executeUpdate(insertSQL,withArgumentsInArray: nil)

if !result
{

print("Error: \(ticketDB.lastErrorMessage())")

} else
{

let alt = PMAlertController(title: "Success!", description: "Your data is saved to Database!", image: UIImage(named: ""), style: .Alert)

alt.addAction(PMAlertAction(title: "OK!", style: .Default, action:
{ (ACTION) -> Void in
let ticketInfo = NSMutableDictionary()
let ticketDB = FMDatabase(path: self.databasePath as String)
if ticketDB.open()
{

let querySQL = "SELECT * FROM TICKET"

let result: FMResultSet? = ticketDB.executeQuery(querySQL, withArgumentsInArray: nil)

if let result = result
{
self.ticketDataArray = NSMutableArray()
while result.next()
{

ticketInfo["ticket_category"] = self.ticket_category.text
ticketInfo["ticket_type"] = self.ticket_type_name.text
ticketInfo["date"] = self.ticket_date.text
ticketInfo["time"] = self.ticket_time.text
ticketInfo["image"] = self.display_image.image
print("Data: \(ticketInfo)")

}
let dict = ["Watchdat":ticketInfo]

self.session.sendMessage(dict, replyHandler: { (replayDic: [String:AnyObject]) -> Void in
print(replayDic["Watchdat"])
}, errorHandler: { (error:NSError) -> Void in
print(error.description)
})

}else
{
print("Error: \(ticketDB.lastErrorMessage())")

}

ticketDB.close()

}


}))

self.presentViewController(alt, animated: true, completion: nil)
print(databasePath)

}
}

下面是 watch 端的源代码

class InterfaceController: WKInterfaceController, WCSessionDelegate {

var session: WCSession!



@IBOutlet var watch_displayImage: WKInterfaceImage!
@IBOutlet var watch_ticket_category: WKInterfaceLabel!
@IBOutlet var watch_ticketType: WKInterfaceLabel!
@IBOutlet var watch_ticketTime: WKInterfaceLabel!
@IBOutlet var watch_ticketDate: WKInterfaceLabel!

override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)

if WCSession.isSupported()
{

session = WCSession.defaultSession()
session.delegate = self
session.activateSession()

}


}

override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()


}


func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
print(message.values)

var dict = Dictionary<String,AnyObject>()
watch_ticket_category.setText(dict["Watchdat"]! as? String)
}

最佳答案

在 iOS 端:

您花时间构建票证数组,但随后不对该数组执行任何操作。您传递了一张票的字典,而不是传递了一组票字典。

let ticketInfo = NSMutableDictionary()
...
self.ticketDataArray = NSMutableArray()
while result.next()
{
ticketInfo.setObject(result.stringForColumn("image"), forKey: "image")
ticketInfo.setObject(result.stringForColumn("ticket_category"), forKey: "ticket_category")
ticketInfo.setObject(result.stringForColumn("ticket_type"), forKey: "ticket_type")
ticketInfo.setObject(result.stringForColumn("date"), forKey: "date")
ticketInfo.setObject(result.stringForColumn("time"), forKey: "time")
self.ticketDataArray.addObject(ticketInfo)
}
let dict = ["Watchdat":ticketInfo]

您应该忽略构造数组,或者传递用于该键的正确值。

在 watchOS 方面:

var dict = Dictionary<String,AnyObject>()
watch_ticket_category.setText(dict["Watchdat"]! as? String)

您正在检查的字典是您刚创建的新的空字典。但是, watch 接收到的手机数据被传递给 message 参数中的 didReceiveMessage。如果您查看那个字典,您应该会找到您期望的内容。

请注意,“Watchdat”键的值不能有条件地转换为字符串。您还需要更正它,具体取决于您是指该键的值是字典还是数组。

如果你打算让它成为一个嵌套字典,就像你现在编写的代码一样,你必须设置每个标签,如下所示:

watch_ticket_category.setText(message["Watchdat"]!["ticket_category"])

关于图片:

您的记录的图像列类型是一个字符串,但您希望 watch 显示一个WKInterfaceImage。如果您打算将图像传递给 watch ,您还需要在 iOS 端修复该代码。

SO 上有很多解释如何将图像传输到 watch 的答案。您应该记住的两件事是:

  • 图像的大小。不要浪费时间和电池生命周期来传输最终会显示在较小 watch 屏幕上的高分辨率图像。在传输图像之前缩放图像。

  • sendMessage 支持的最大负载大小,尤其是当您打算传输一组票证(和图像)而不是单个票证时。

    <

关于ios - 从 iOS 应用程序将字典数据发送到 Apple Watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39072103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com