首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在消息扩展中发送MSMessage?

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

Stack Overflow用户
提问于 2016-09-20 17:11:50
回答 1查看 1.4K关注 0票数 5

我想要实现一个imessage应用程序,但是对于消息框架来说是新的,而iMessage应用是如此新的东西--没有太多的资源。因此,我遵循WWDC视频并使用Apples提供样本应用程序作为指南。

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

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

但是,当我试图创建数据时,我会崩溃。

代码语言:javascript
复制
@IBAction func createAction(_ sender: AnyObject) {
    //present full screen for create list
    self.delegate?.createViewControllerDidSelectAdd(self as! CreateViewControllerDelegate)        
}

我试图传递的数据类型是结构中的字典:

代码语言:javascript
复制
struct data {
var title: String!
var date: Date!

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

}

所以事情是这样安排的

MessagesViewController

代码语言:javascript
复制
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

代码语言:javascript
复制
/**
 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?如果我能够发送信息,那么我应该能够接收和重新发送。

EN

回答 1

Stack Overflow用户

发布于 2016-09-21 00:06:40

我看到了一个问题,无法亲自调试:您正在将您的components.queryItems设置为字典var强制转换为String:String,但是从data.dictionary返回的字典不是String:String,而是String:Any。

尤其是,字典“Array1”是一个字符串数组,而不是一个字符串。字典“Array2”也是如此。URLQueryItem希望在init()中给出两个字符串,但是您正在尝试将一个字符串和一个字符串数组放入其中(尽管我不确定您是否真的在queryItems(字典:)方法中进入了这一行。

当然,您的dataItem.dictionary将返回一个包含4个空值的字典。我不确定这就是你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39600081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档