Como enviar MSMessage na Extensão de mensagens?

Eu quero implementar um aplicativo de imessage, no entanto sendo novo no framework de mensagens e aplicativos de iMessage sendo uma coisa tão nova, não há muitos recursos. Por isso, estou a seguir o vídeo da WWDC e a usar maçãs que fornecem Uma aplicação de amostras para um guia.

tenho três visualizações, a {[4] } que lida com praticamente toda a funcionalidade e depois a CreateViewController e a DetailsViewController.

estou simplesmente a tentar criar um MSMessage a partir do CreateViewController e mostrar no DetailsViewController.. entao adicione aos dados.

No entanto, tenho um acidente quando tento criar os dados.

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

o tipo de dados que estou a tentar passar é o dicionário de uma estrutura:

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

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

}
Então é assim que as coisas são feitas.

Controlador de mensagens

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)

}

}
Alguém pode mostrar onde estou a correr mal e como posso enviar um? Se sou capaz de enviar a mensagem, então devo ser capaz de receber e reenviar.

Author: halfer, 2016-09-20

1 answers

Uma questão que vejo, sem ser capaz de a depurar eu próprio.: está a preparar os seus componentes.queryItems to your dictionary var cast as [String: String], but the dictionary returned from data.o dicionário não é uma [String: String], mas uma [String:Any]

Em particular, o dicionário ["Array1"] é um array de Strings, não uma única string. O mesmo para o dicionário ["Array2"]. O URLQueryItem espera receber duas cadeias de caracteres no seu init(), mas está a tentar colocar uma cadeia de caracteres e uma série de cadeias de caracteres in(though i'm not sure that you're actually getting to that line in your queryItems (dictionary:) method.

Claro, o seu dataítem.o dicionário está a devolver um dicionário com 4 valores vazios. Não sei se é isso que queres.
 0
Author: Joseph Wardell, 2016-09-21 00:06:40