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.
@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.
1 answers
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.