当前位置: 首页 > 知识库问答 >
问题:

匹配选定的行以传递数据

贺聪
2023-03-14

我已经看了所有这些Swift和asp。net和javascript问题。

1 2 3 4 5

目标:
当我从MessageListController中的聊天消息列表中选择一条消息时,我希望下一个ChatDetailController中打开的会话是所选择的会话。

我正在为我的WatchKit应用程序在此iOS图像中做同样的事情。选择与Sophia的消息,并打开与Sophia的聊天。[![在此处输入图像描述][6]][6]

我想传递json“message\u id”,即chatMessageId属性。正如您在代码中看到的那样,我已经将聊天信息ID从消息模型传递到聊天详细控制器。

我需要通过的是ChatModel的chatMessageId吗?还是我已经在传递我需要的数据了

传递的上下文:可选(HTWatch\u Extension.MessageModel(合作伙伴:“9859”,昵称:“Marco”,消息:“你看到的是狗吗?”,城市:“马德里”,countryBadgeImageURL:https://i.imgur.com/PJcyle7.jpg,messageListImageURL:https://i.imgur.com/PJcyle7.jpg,聊天信息ID:“Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ”,状态:“脱机”)

尝试:我是否需要从ChatDetailController的awakeWithContext方法中提取解析ChatModel的Do catch块,并将其放入MessageListController的didSelectRowAt方法中?


消息列表控制器

// ...code...

var messageObject = [MessageModel]()
var chatObject = [ChatModel]()

// ...code...

override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {

    var messageContext = messageObject[rowIndex]
    var chatContext = chatObject[rowIndex]

    do {
        guard let fileUrl = Bundle.main.url(forResource: "Chats", withExtension: "json") else {
            print("File could not be located")
            return
        }
        let data = try Data(contentsOf: fileUrl)
        let decoder = JSONDecoder()

        let msg = try decoder.decode([ChatModel].self, from: data)
        self.chatObject = msg

    } catch let error {
        print(error)
    }

    messageContext.chatMessageId = (chatObject as AnyObject).filter { (dictionaryTemp:[String:String]) -> Bool in
        return dictionaryTemp["message_id"] == chatContext.chatMessageId
    } 

    // WatchKit's model presentation method.
    presentController(withName: "ChatDetailController", context: messageContext)
}

共有1个答案

章绪
2023-03-14

如果我理解正确,您的Chat.json将为所有消息ID设置聊天记录。选择一个消息ID行并加载相应的聊天记录。

在这种情况下,您可以使用过滤器根据消息进行解析。假设你在这样的字典里有它。

示例:

let responseString = "{\"name\":\"Tom\"}"

if let responseData = responseString.data(using: .utf8){
    do {

    let object = try JSONSerialization.jsonObject(with:responseData , options: .allowFragments)
    print("Response Object=\(object)")
    } catch{
        print("parsing Error=\(error)")
    }
}

您可以使用类似的代码来创建您的对象。最终对象应该类似于chat Dicpedia

let chatDictionary = [
[
    "fromId": "zz1234skjksmsjdfwe2zz",
    "toId": "qq43922sdkfjsfmmxdfqq",
    "messageText": "Have you seen is dog?",
    "imageUrl": "https://i.imgur.com/PJcyle7.jpg",
    "message_id": "Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ",
    "read": "true"
    ],
[
    "fromId": "zz1234skjksmsjdfwe2zz",
    "toId": "qq43922sdkfjsfmmxdfqq",
    "messageText": "Yes I have. It's cute.",
    "imageUrl": "https://i.imgur.com/PJcyle7.jpg",
    "message_id": "Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ",
    "read": "true"
    ],
[
    "fromId": "zz1234skjksmsjdfwe2zz",
    "toId": "qq43922sdkfjsfmmxdfqq",
    "messageText": "I want to get a pet too.",
    "imageUrl": "https://i.imgur.com/PJcyle7.jpg",
    "message_id": "Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ1",
    "read": "true"
    ]
]

您在索引处选择了行

    override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {

            let message = messageObjects[rowIndex]
            // Create a chat object Dictionary, parse it before you pass it to the detail View Controller , if you have the chat.json.
// I have used 'Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ', but here you can your message id property to make it dynamic
            message.chatObjects= chatDictionary.filter { (dictionaryTemp:[String : String]) -> Bool in
            return dictionaryTemp["message_id"] == "Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ"
        }
            presentController(withName: "ChatDetailController", context: message)
        }
 类似资料:
  • 如果我的文档定义为 我希望能够使用MongoTemplate进行查询,以便传递一个值列表,如[cool]、[Aspective],作为回报,我将获得上面的第一个集合,而不是第二个集合。就我想要实现的目标而言,目前的美元条件似乎还不够。我试过使用$all条件,在Mongo控制台上它可以根据我的需要工作,但在我的代码中有些东西不起作用,我的查询要花很长时间才能详细说明。相反,有了$in运算符,我的代码

  • 问题内容: 我需要使用jquery动态地将数据传递到我的选择列表。我在控制台中看到了该数据,但列表为空。您能帮我找到解决方案吗? 我的选择清单 问题答案: 将您的JavaScript代码更改为此

  • 我有一些RadioButton在片段A,,和一些RadioButton在片段B我希望当这些(FragmentA)之一,在FragmentB禁用所有单选按钮.相同的活动主机这些片段。 片段A中的事件单击单选按钮:

  • 我的要求是对输入文件中给出的数据运行测试。为了实现,我正在使用 请帮助确定我做错了什么。

  • 问题内容: 我已经使用sed编写了一个小脚本来对此进行转换: 变成这样的csv文件格式: 我现在想将每个数字除以1.000.000,这样它们就不代表µV,而是代表V和W而不是µW,这样一眼便可以轻松理解它们。当然,一旦我在libre office calc中打开此csv之后,便可以手动执行此操作,但是我想使其自动化。 所以我发现,我可以在sed之间调用外部程序,如下所示: 这样我就可以通过以下方式

  • 问题内容: 我有一个基于Windowsservercore的Docker文件,该文件托管了ASP.net Core Web应用程序。 Docker文件中的片段 使用以下命令运行docker映像时,我试图传递将传递给exe端点的可选参数。 问题答案: 您需要拥有一个CMD https://docs.docker.com/engine/reference/builder/#/cmd 或ENTRYPOI