2016-09-20 4 views
5

Я хочу реализовать приложение imessage, но, будучи новичком в структуре сообщений и приложениями iMessage, является такой новой вещью, что ресурсов не так много. Поэтому я следую за WWDC video и используя Яблоки, предоставляя sample app для руководства.Как отправить MSMessage в расширение сообщений?

У меня есть три вида, MessageViewController, который обрабатывает практически всю функциональность, а затем CreateViewController и DetailsViewController.

Я просто пытаюсь создать MSMessage с CreateViewController и отобразиться в 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()) 
} 

} 

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? Если я могу отправить сообщение, я должен получить и отправить его повторно.

+0

что может быть проблема прохождения 'dataItem'-структуру в function 'func composeMessage (для data: dataItem)' Мне удалось отправить строковое значение без использования структуры, как в этом видеоуроке https://www.youtube.com/watch?v=pe-J7OsQHhI – RileyDev

+0

@RileyDev - Это youtube video помог! – kamyFC

ответ

0

Один вопрос, который я вижу, не имея возможности отлаживать это самостоятельно: вы устанавливаете свои компоненты.queryItems в ваш словарь var cast как [String: String], но словарь, возвращаемый из data.dictionary, не является [String : String], но a [String: Any]

В частности, словарь ["Array1"] представляет собой массив строк, а не одну строку. То же самое для словаря ["Array2"]. URLQueryItem ожидает, что ему будут предоставлены две строки в init(), но вы пытаетесь поместить строку и массив строк (хотя я не уверен, что вы действительно попадаете в эту строку в вашем queryItems (dictionary: метод).

конечно, ваш dataItem.dictionary возвращается словарь с 4 пустых значений. Я не уверен, что это то, что вы хотите.

+0

Я действительно прокомментировал функцию QueryItems и словарь, jus установил руководство для сообщений но все-таки получить краху во время работы – JUSDEV

+0

Что такое текст в консоли при его сбое? В какой строке он останавливается? –

+0

Является ли код вашего вопроса актуальным с вашим проектом? Я не вижу метод createList() для CreateViewController –