2016-10-02 2 views
0

didRecieve()を実装して、iOS 10内でストーリーボードのセグをトリガーしようとしています。ストーリーボードを使用して、次のコードを使用してメッセージを作成した後で、私はセグをトリガーできます:iOS 10メッセージの拡張 - Simulatorで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" 
    } 
} 

これは素晴らしいです。私は作成した後、私はメッセージを使ってメッセージを送信することができ、それはメッセージを送信する人のためにセグを引き起こすIPhoneシミュレータによって受信されます。

相手のスレッドでメッセージを選択したいときに問題が発生します。 Appleは、拡張機能を持つユーザー間でメッセージの送受信をテストするために、シミュレータに2つの相互接続されたメッセージスレッドを含みます。

受信したスレッドでメッセージを選択すると、セグがトリガーされません。これは、ルートビューコントローラの新しいコピーをロードするだけです。

私が望む動作は、特定のメッセージインスタンスの受信情報を取得し、このデータを使用してセグをトリガーすることです。 Appleはこれを実現するために次のインスタンスプロパティを提供しています。

ここではAPIドキュメントにselectedMessageを参照してください:https://developer.apple.com/reference/messages/msconversation/1648186-selectedmessage

の質問はどのようにこのインスタンス・プロパティは実装されていますか?メッセージ拡張子のルートビューコントローラのonViewDidLoad()に実装されていますか? Appleのドキュメントは、受信したメッセージ拡張子の末尾にある選択されたメッセージから受信したメッセージデータをスクープするためにインスタンスプロパティを実際に実装する方法についてはかなり曖昧です。誰もこれを実装していますか?

THANKS !!

答えて

0

受信者がメッセージを選択すると、willBecomeActiveselectedMessageを保持する、と呼ばれ、あなたにMSConversationを与えている:

override func willBecomeActive(with conversation: MSConversation) { 
    super.willBecomeActive(with: conversation) 
    let message = conversation.selectedMessage 
    ... 
} 

参照:先端のためのHelpful Apple sample

+0

感謝を! didSelectがメッセージを選択したときに受信メッセージユーザによってトリガされていないようです。送信者のトランスクリプトでメッセージが選択されたときにトリガーされます。これは、あなたの内線内のどこかでメッセージが選択されるたびに起動されるはずです。 – thexande

+0

私は方法と間違えられました。ごめんなさい。回答が更新されました。 – shallowThought

+0

xcodeがそのメソッド名を認識しないように見える – thexande

関連する問題