Строка соответствия, выбранная для передачи данных - PullRequest
5 голосов
/ 03 апреля 2019

Я посмотрел на все эти вопросы по Swift, asp.net и javascript.

1 2 3 4 5

Цель:
Когда я выбираю сообщения из списка сообщений чата в MessageListController, я хочу, чтобы открытый сеанс в следующем ChatDetailController был выбранным разговором.

Я делаю то же самое в этом образе iOS для моего приложения WatchKit.Сообщение с Софией будет выбрано, и откроется чат с Софией.[! [введите описание изображения здесь] [6]] [6]

Я хочу передать json "message_id", то есть свойство chatMessageId.Я уже передаю chatMessageId из MessageModel в ChatDetailController, как вы можете видеть в коде.

Это chatMessageId из ChatModel, который мне нужно пройти?Или я уже передаю данные, которые мне нужны?

Переданный контекст: Необязательный (HTWatch_Extension.MessageModel (партнер: "9859", псевдоним: "Марко", сообщение: "Вы видели собаку?", Город: "Мадрид",countryBadgeImageURL: https://i.imgur.com/PJcyle7.jpg, messageListImageURL: https://i.imgur.com/PJcyle7.jpg, chatMessageId: "Tva9d2OJyWHRC1AqEfKjclRwXnlRDQ", статус: "в автономном режиме"))

Требуется: возьмите блок do-catch, в котором я анализирую ChatModel из ChatDetailController awakeWithContext метода и поместим его в didSelectRowAt метод MessageListController?


MessageListController

// ...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 Ответ

3 голосов
/ 03 апреля 2019

Если я правильно понял, ваш Chat.json будет иметь чат для всех идентификаторов сообщений.Выберите одну из строк идентификатора сообщения и загрузите соответствующую историю чата.

В этом случае вы можете выполнить анализ на основе сообщения с помощью filter.Допустим, у вас есть такой словарь в следующем словаре.

Пример:

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)")
    }
}

Вы можете использовать подобный код для создания вашего объекта.Конечный объект должен выглядеть примерно так: chatDictionary

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)
        }
...