【发布时间】:2016-08-22 05:47:39
【问题描述】:
在我的应用程序中,我有一个名为“TicketDetailViewController”的页面,其中有 3 个标签和一个 imageView,其中显示上一页的数据。现在我想要的是当我点击我的“sendtowatch”按钮时,我想将显示的数据(即 3 个标签和一个 imageView)发送到我的苹果手表,在那里我还在它的故事板中拍摄了 3 个标签和一个 imageView。问题是我正在使用 FMDB 数据库来存储和检索数据。现在在我的 IOS 应用程序中单击按钮,显示的数据将保存在数据库中,同时我还需要检索它,以便手表可以接收我存储在数据库中的最新数据。我已经尝试了解决方案,但没有运气。
下面是我正在运行的应用程序页面的屏幕截图 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)
}
}
我的手表源代码如下
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 应用上激活了会话?当您发送消息时,手表是否触手可及?
-
是的,双方都激活了会话..我如何做到这一点?
-
调试每一步的代码并找出问题所在。看看您是否可以从 FMDB 获取数据,或者发送消息函数是否正确完成了它的工作。