Как отправить MSMessage в расширении сообщения?

Я хочу реализовать приложение imessage, однако, будучи новичком в структуре сообщений и приложениями iMessage, являющимися такими новыми, ресурсов не так много. Поэтому я слежу за видео WWDC и использую пример приложения Apple для руководства.

У меня есть три мнения, MessageViewController который обрабатывает почти все функциональные возможности, а затем CreateViewController и DetailsViewController,

Я просто пытаюсь создать MSMessage от CreateViewController и отображать в DetailsViewController.. затем добавьте к данным.

Однако я получаю сбой при попытке создать данные.

@IBAction func createAction(_ sender: AnyObject) {
    //present full screen for create list
    self.delegate?.createViewControllerDidSelectAdd(self as! CreateViewControllerDelegate)        
}

Тип данных, который я пытаюсь передать - это словарь из структуры:

struct data {
var title: String!
var date: Date!

var dictionary = ["title" : String(), "Array1" : [String](), "Array2" : [String]() ] as [String : Any]

}

Итак, вот как все устроено;

MessagesViewController

class MessagesViewController: MSMessagesAppViewController, {

// MARK: Responsible for create list button

func composeMessage(for data: dataItem) {

    let messageCaption = NSLocalizedString("Let's make", comment: "")

    let dictionary = data.dictionary

    func queryItems(dictionary: [String:String]) -> [URLQueryItem] {
        return dictionary.map {
            URLQueryItem(name: $0, value: $1)
        }
    }

    var components = URLComponents()
    components.queryItems = queryItems(dictionary: dictionary as! [String : String])

    let layout = MSMessageTemplateLayout()
    layout.image = UIImage(named: "messages-layout-1.png")!
    layout.caption = messageCaption

    let message = MSMessage()
    message.url = components.url!
    message.layout = layout
    message.accessibilityLabel = messageCaption

    guard let conversation = activeConversation else  { fatalError("Expected Convo") }

    conversation.insert(message) { error in
        if let error = error {
            print(error)
        }
    }

}

}


extension MessagesViewController: CreateViewControllerDelegate {

func createViewControllerDidSelectAdd(_ controller: CreateViewControllerDelegate) {
    //CreatesNewDataItem
    composeMessage(for: dataItem())
}

}

CreateViewController

/**
 A delegate protocol for the `CreateViewController` class.
*/
protocol CreateViewControllerDelegate : class {
func createViewControllerDidSelectAdd(_ controller: CreateViewControllerDelegate)

}

class CreateViewController: UIViewController {

static let storyboardIdentifier = "CreateViewController"

weak var delegate: CreateViewControllerDelegate?

@IBAction func create(_ sender: AnyObject) {
    //present full screen for create list

    self.delegate?.createViewControllerDidSelectAdd(self as! CreateListViewControllerDelegate)

}

}

Будет ли кто-то показать, где я иду не так и как я могу отправить MSMessage? Если я смогу отправить сообщение, я должен быть в состоянии получить и повторно отправить.

1 ответ

Одна проблема, которую я вижу, не имея возможности отлаживать это самостоятельно: вы устанавливаете свои компоненты.queryItems в свой словарь, переменный тип как [String:String], но словарь, возвращаемый из data.dictionary, не является [String:String], но [Строка: любая]

В частности, dictionary["Array1"] - это массив строк, а не одна строка. То же самое для словаря ["Array2"]. Ожидается, что URLQueryItem получит две строки в своем init(), но вы пытаетесь вставить строку и массив строк (хотя я не уверен, что вы на самом деле получаете эту строку в свой queryItems(словарь:) метод.

Конечно, ваш dataItem.dictionary возвращает словарь с 4 пустыми значениями. Я не уверен, что это то, что вы хотите.

Другие вопросы по тегам