我想要实现一个imessage应用程序,但是对于消息框架来说是新的,而iMessage应用是如此新的东西--没有太多的资源。因此,我遵循WWDC视频并使用Apples提供样本应用程序作为指南。
我有三个视图,MessageViewController处理几乎所有的功能,然后是CreateViewController和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]
}所以事情是这样安排的
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?如果我能够发送信息,那么我应该能够接收和重新发送。
发布于 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个空值的字典。我不确定这就是你想要的。
https://stackoverflow.com/questions/39600081
复制相似问题