5

我想实现一个 imessage 应用程序,但是对于消息框架和 iMessage 应用程序是新手来说,这是一个新事物,资源并不多。因此,我正在关注WWDC 视频并使用 Apples 提供示例应用程序作为指南。

我有三个视图,MessageViewController它们处理几乎所有的功能,然后是 aCreateViewController和 a 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]

}

这就是事情的设置方式;

消息视图控制器

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())
}

}

创建视图控制器

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

4

1 回答 1

0

我看到的一个问题,无法自己调试:您将 components.queryItems 设置为您的字典 var 转换为 [String:String],但从 data.dictionary 返回的字典不是 [String:String],而是一个 [字符串:任何]

特别是,dictionary["Array1"] 是一个字符串数组,而不是单个字符串。字典 ["Array2"] 相同。URLQueryItem 期望在它的 init() 中给出两个字符串,但是您试图将一个字符串和一个字符串数组放入其中(尽管我不确定您是否真的在 queryItems(dictionary: ) 方法。

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

于 2016-09-21T00:06:40.867 回答