- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想实现一个 imessage 应用程序,但是作为消息框架的新手,而 iMessage 应用程序又是一个新事物,资源不多。所以我正在关注 WWDC video并使用苹果提供 sample app寻求指导。
我有三个 View ,处理几乎所有功能的 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())
}
}
创建 View Controller
/**
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
吗?如果我能够发送消息,那么我应该能够接收和重新发送。
最佳答案
我看到一个问题,但无法自行调试:您正在将您的 components.queryItems 设置为您的字典 var 转换为 [String:String],但是从 data.dictionary 返回的字典不是 [String:String],而是 [String:Any]
特别是,dictionary["Array1"] 是一个字符串数组,而不是单个字符串。与字典 ["Array2"] 相同。 URLQueryItem 期望在它的 init() 中被赋予两个字符串,但是您试图将一个字符串和一个字符串数组放入(尽管我不确定您是否真的到达了您的 queryItems(dictionary: ) 方法。
当然,您的 dataItem.dictionary 将返回一个包含 4 个空值的字典。我不确定这就是您想要的。
关于ios - 如何在 Messages Extension 中发送 MSMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39600081/
我是一名优秀的程序员,十分优秀!