Ios 如何使用sendMessage将数组发送到监视?错误:无法强制转换类型为'__NSCFArray';至';NSString';

Ios 如何使用sendMessage将数组发送到监视?错误:无法强制转换类型为'__NSCFArray';至';NSString';,ios,swift,watchkit,watchos-2,watchconnectivity,Ios,Swift,Watchkit,Watchos 2,Watchconnectivity,我使用WatchConnectivity将一组字符串值从iPhone发送到手表,但执行此操作时出现以下错误 无法将类型为“\uu NSCFArray”(0x591244)的值强制转换为“NSString” (0x9f7458) 我在将字典中的字符串数组发送到手表,然后保存该数组以在WKInterfaceTable中使用时遇到了一些小问题 有人知道我哪里出错了,以及我如何在手表上显示阵列吗 iPhone 在收到手表发送数据的第一条信息后,iPhone会执行以下操作 有一个名为objectsArra

我使用
WatchConnectivity
将一组字符串值从iPhone发送到手表,但执行此操作时出现以下错误

无法将类型为“\uu NSCFArray”(0x591244)的值强制转换为“NSString” (0x9f7458)

我在将字典中的字符串数组发送到手表,然后保存该数组以在
WKInterfaceTable
中使用时遇到了一些小问题

有人知道我哪里出错了,以及我如何在手表上显示阵列吗

iPhone

在收到手表发送数据的第一条信息后,iPhone会执行以下操作

有一个名为
objectsArray
的数组,每个对象都有一个名为
title
的字符串属性。我为所有
title
值创建一个新数组,并使用字典中的数组发送到手表

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

  var watchArray = [""]

  for object in self.objectsArray {
     watchArray.append(object.title)
  }

  print("Received message from watch and sent array. \(watchArray)")
  //send a reply
  replyHandler( [ "Value" : [watchArray] ] )

}
观看

var objectTitlesArray = ["String"]


//Display Array in WKInterfaceTable

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


//Saving the Array

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.objectTitlesArray = value
        print("Received Array and refresh table")
        loadTableData()
    }

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

}  
更新


上述错误似乎与将标签文本设置为值时的刷新操作有关。但是,在注释掉这些行之后,数组似乎仍然没有显示在WKInterfaceTable中,并且没有任何打印语句输出到控制台

这就是发生错误的地方:

let value=message[“value”]as![字符串]

在上面,您将在
消息
字典中获得
属性,并将其显式转换为
字符串
。其内容应如下:

if let value = message["Value"] {

    dispatch_async(dispatch_get_main_queue()) {
        self.objectTitlesArray = value as! [String]
    }
}
另一方面,看起来您还将字符串数组包装到另一个冗余数组中:

replyHandler([“值”:[watchArray]])

如果您只想发送字符串数组,那么以下内容就足够了:


replyHandler([“Value”:watchArray])
sendMessage
方法应处理来自手机的回复。如果iPhone没有使用
sendMessage
方法,他们没有理由在手表上使用
direceivemessage
方法

@IBAction func fetchData() {

    let messageToSend = ["Value":"Hello iPhone"]
    session.sendMessage(messageToSend, replyHandler: { replyMessage in

        if let value = replyMessage["Value"] {
                self.objectTitlesArray = value as! [String]
                self.loadTableData()
        }

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

}

将value的值强制转换为
[Array]
时,当我将其保留为
[String]时,会出现以下错误“对成员'Subscript'的引用不明确”
只需编辑手机上的回复处理程序,我仍然会遇到问题中提到的相同错误。不幸的是,仍然会得到对成员“Subscript”的模糊引用。:(使用
[AnyObject]
而不是
[Array]怎么样
?我确信它现在应该可以工作了,您的更改是有意义的。但不幸的是,仍然出现错误
无法将类型为“\u NSCFArray”(0x520244)的值强制转换为“NSString”(0x986458)。
您是否将replyhandler更改为replyhandler([“value”:watchArray])?