Я пытаюсь реализовать didRecieve(), чтобы вызвать раскладку segue внутри расширения iOS 10. Используя раскадровку, я могу вызвать segue после создания сообщения, используя следующий код:Расширение сообщений iOS 10 - реализация didRecieve() и selectedMessage в симуляторе
@IBAction func createThing(_ sender: AnyObject) {
self.createMessage()
}
func composeMessage(customMessage: String, caption: String) -> MSMessage {
var components = URLComponents()
// create a query item from our custom message
let item = URLQueryItem(name: "New Thing", value: customMessage)
// put it into an array of query items
var items = [URLQueryItem]()
items.append(item)
components.queryItems = items
// tell messages to use the default message template layout
let layout = MSMessageTemplateLayout()
layout.caption = caption
// create a message and tell it the content and layout
let message = MSMessage()
message.url = components.url!
message.layout = layout
// return it for sending
return message
}
override func didReceive(_ message: MSMessage, conversation: MSConversation) {
print("message recieved!!")
self.pollRecieved = true
guard let messageURL = message.url else { return }
guard let urlComponents = NSURLComponents(url: messageURL, resolvingAgainstBaseURL: false), let queryItems = urlComponents.queryItems else { return }
print("URL Components", urlComponents)
print("queryItems", queryItems)
for item in queryItems {
print("Received \(item.name) with value \(item.value)")
}
print("attempting segue!")
self.performSegue(withIdentifier: "showPollSegue", sender: self)
}
func createMessage() {
let message = composeMessage(customMessage: "This is really important.", caption: "User-facing caption here")
self.activeConversation?.insert(message)
print("message here!!", message)
}
// segue override
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if(segue.identifier == "showThingSegue") {
let vc = segue.destination as! MessagesViewController
vc.messageID = "1234567"
}
}
Это прекрасно работает. Я могу отправить сообщение с помощью сообщения i после создания, и оно получено симулятором IPhone, инициирующим segue для человека, отправляющего сообщение.
Проблема возникает, когда я хочу выбрать сообщение в потоке других лиц. Apple включает в себя два взаимосвязанных потока сообщений в симуляторе для тестирования отправки и получения сообщений между пользователями с вашим расширением.
Когда я выбираю сообщение в полученном потоке, сеанс не запускается. Он просто загружает новую копию контроллера корневого представления.
Поведение, которое я хочу, - это захватить полученную информацию для конкретного экземпляра сообщения и инициировать segue с использованием этих данных. Для этого Apple предоставляет следующее свойство экземпляра.
Обратитесь к selectedMessage в API Docs здесь: https://developer.apple.com/reference/messages/msconversation/1648186-selectedmessage
Вопрос в том, как реализуется это свойство экземпляра? Он реализован в onViewDidLoad() контроллера корневого представления для вашего расширения сообщения? Документы Apple довольно расплывчаты в том, как фактически реализовать свойство экземпляра, чтобы выкопать полученные данные сообщения из выбранного сообщения на полученном конце вашего сообщения. Кто-нибудь реализовал это?
СПАСИБО !!
Спасибо за подсказку! Похоже, что didSelect не запускается пользователем приема сообщений, когда они выбирают сообщение. Он запускается, когда сообщение выбрано в транскрипции отправителей. Это должно срабатывать, когда сообщение выбрано в любом месте вашего расширения, не так ли? – thexande
Я ошибся метод. Сожалею. Ответ обновлен. – shallowThought
Похоже, что xcode не распознает имя метода – thexande