5

iMessage アプリを実装したいのですが、メッセージ フレームワークと iMessage アプリは初めてなので、リソースがあまりありません。そのため、 WWDC ビデオに従って、ガイド用のサンプル アプリを提供する Apple を使用しています。

私は 3 つのビューを持っています。ビューはMessageViewControllerほぼすべての機能を処理し、次に と を処理CreateViewControllerDetailsViewControllerます。

私は単純に から を作成して .. に表示し、データに追加しようとしてMSMessageいますCreateViewControllerDetailsViewController

ただし、データを作成しようとするとクラッシュします。

@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]

}

設定方法は次のとおりです。

メッセージViewController

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か? メッセージを送信できれば、受信して再送信できるはずです。

4

1 に答える 1

0

これを自分でデバッグできなくても、私が見る1つの問題: components.queryItems を [String:String] としてキャストされた辞書 var に設定していますが、data.dictionary から返される辞書は [String:String] ではありませんが、 a [文字列:任意]

特に、dictionary["Array1"] は文字列の配列であり、単一の文字列ではありません。辞書["Array2"]も同様です。URLQueryItem は init() で 2 つの文字列が与えられることを期待していますが、文字列と文字列の配列を入れようとしています (ただし、実際に queryItems(dictionary: ) 方法。

もちろん、dataItem.dictionary は 4 つの空の値を持つ辞書を返しています。それがあなたの望むものかどうかはわかりません。

于 2016-09-21T00:06:40.867 に答える