如何在消息扩展中发送MSMessage?

我想实现一个imessage应用程序,但是对于消息框架和新的iMessage应用程序来说,新的东西没有太多的资源。 所以我正在关注WWDCvideo,并使用提供示例应用程序的 Apples来指导。

我有三个视图, MessageViewController处理几乎所有的function,然后CreateViewControllerDetailsViewController

我只是试图从CreateViewController创build一个MSMessage ,并显示在DetailsViewController ..然后添加到数据。

但是,当我尝试创build数据时遇到了崩溃。

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

我试图传递的数据types是结构体中的字典:

 struct data { var title: String! var date: Date! var dictionary = ["title" : String(), "Array1" : [String](), "Array2" : [String]() ] as [String : Any] } 

所以这里是如何build立的。

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 ? 如果我能够发送消息,我应该能够接收和重新发送。

我看到一个问题,而不能自己debugging:你正在将你的components.queryItems设置为字典var cast as [String:String],但是从data.dictionary返回的字典不是[String:String],但是a [string:任何]

特别是dictionary [“Array1”]是一个string数组,而不是一个string。 字典[“Array2”]相同。 URLQueryItem期望在它的init()中给出两个string,但是你试图把一个string和一个string数组(虽然我不确定你是否真的在你的queryItems(字典: ) 方法。

当然,你的dataItem.dictionary正在返回一个有4个空值的字典。 我不确定那是你想要的。