无法将“Array <string>”类型的值转换为预期的参数类型“String?”

时间:2016-02-21 21:11:03

标签: ios arrays swift watchconnectivity

我正在使用WatchConnectivity框架从手机向Apple Watch发送名为watchItems字符串值的数组。我从发送的字典中添加watchItems并将其添加到手表上名为items的数组中,以便在WKInterfaceTable中使用。

将标签文本设置为theItem时,以下行发生错误。

for (index, theItem) in self.items.enumerate() {
    let row = self.table.rowControllerAtIndex(index) as! CellRowController
    row.bookmarksCellLabel.setText(theItem)
 }

这是对我正在做的事情的完整解释。

iPhone

self.items是一个NSManagedObject的数组,每个项目都有一个名为title的属性,它是一个字符串。所以我遍历objects数组并将所有字符串值添加到名为watchItems的数组中。

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

    var watchItems = [""]

    for item in self.items {
       watchItems.append(item.title)
    }

    //send a reply
    replyHandler( [ "Value" : [watchItems]])

}

Apple Watch

在这里,我将收到的消息字典中的watchItems数组添加到手表上的items数组中。 watchItems数组是一个字符串值数组,手表上的items数组也是如此。

var items = [String]()

@IBAction func refreshAction() {
    let messageToSend = ["Value":"Hello iPhone"]
    session.sendMessage(messageToSend, replyHandler: { replyMessage in

         let value = replyMessage["Value"] as! String
         self.titleLabel.setText(value)

        }, errorHandler: {error in
            // catch any errors here
            print(error)
    })
}


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

    let value = message["Value"] as! [String]

    dispatch_async(dispatch_get_main_queue()) {
        self.items.removeAll()
        self.items.append(value)
        self.loadTableData()
    }

    //send a reply
    replyHandler(["Value":"Yes"])

} 

重新加载WKInterfaceTable并将标签设置为items数组中的每个项目的函数。

func loadTableData() {
    table.setNumberOfRows(self.items.count, withRowType: "CellRow")
    if self.items.count > 0 {
        for (index, theItem) in self.items.enumerate() {
            let row = self.table.rowControllerAtIndex(index) as! CellRowController
            row.cellLabel.setText(theItem)
        }
     }
}

将字符串值添加到cellLabel时出错。有人知道我哪里出错吗?

0 个答案:

没有答案