【发布时间】:2017-01-28 17:33:41
【问题描述】:
我想实现一个 imessage 应用程序,但是对于消息框架和 iMessage 应用程序是新手来说,资源并不多。所以我关注WWDC video 并使用苹果提供sample app 作为指南。
我有三个视图,MessageViewController 处理几乎所有功能,然后是 CreateViewController 和 DetailsViewController。
我只是想从CreateViewController 创建一个MSMessage 并显示在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())
}
}
创建视图控制器
/**
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 吗?如果我能够发送消息,那么我应该能够接收和重新发送。
【问题讨论】:
-
可能的问题是在函数
func composeMessage(for data: dataItem)中传递结构dataItem我已经成功地发送了一个字符串值,而无需使用本视频教程youtube.com/watch?v=pe-J7OsQHhI 中的结构。 -
@RileyDev - youtube 视频帮了大忙!
标签: ios swift swift3 ios10 msmessage