Как правильно нажать JSQMessagesViewController

У меня есть проект Swift, и я пытаюсь использовать в нем JSQMessagesViewController. Я использовалcocopods для установки фреймворка и импортирую его с помощью оператора быстрого импорта.

import JSQMessagesViewController

До этого момента ошибок нет и все компилируется без предупреждения. Однако, когда я пытаюсь добавить новый экземпляр в навигационный контроллер, приложение вылетает.

func openConversation(userId: Int) {
    let messageViewController = JSQMessagesViewController();
    self.navigationController?.pushViewController(messageViewController, animated: true)
}

Вторая строка метода вызывает сбой и сообщение об ошибке.

2015-08-03 21:44:17.229 [4856:64097] *** Assertion failure in -[JSQMessagesViewController viewWillAppear:], /[my file path]/Pods/JSQMessagesViewController/JSQMessagesViewController/Controllers/JSQMessagesViewController.m:223
2015-08-03 21:44:17.232 [4856:64097] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: self.senderId != nil'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001067e3c65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000108590bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x00000001067e3aca +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x0000000106ec298f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
    4   JSQMessagesViewController           0x00000001060e9055 -[JSQMessagesViewController viewWillAppear:] + 277
    5   UIKit                               0x00000001073f8f61 -[UIViewController _setViewAppearState:isAnimating:] + 487
    6   UIKit                               0x000000010741a355 -[UINavigationController _startCustomTransition:] + 887
    7   UIKit                               0x000000010742637f -[UINavigationController _startDeferredTransitionIfNeeded:] + 386
    8   UIKit                               0x0000000107426ece -[UINavigationController __viewWillLayoutSubviews] + 43
    9   UIKit                               0x00000001075716d5 -[UILayoutContainerView layoutSubviews] + 202
    10  UIKit                               0x00000001073449eb -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 536
    11  QuartzCore                          0x0000000108f5ded2 -[CALayer layoutSublayers] + 146
    12  QuartzCore                          0x0000000108f526e6 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    13  QuartzCore                          0x0000000108f52556 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
    14  QuartzCore                          0x0000000108ebe86e _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
    15  QuartzCore                          0x0000000108ebfa22 _ZN2CA11Transaction6commitEv + 462
    16  QuartzCore                          0x0000000108ec00d3 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89
    17  CoreFoundation                      0x0000000106716ca7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    18  CoreFoundation                      0x0000000106716c00 __CFRunLoopDoObservers + 368
    19  CoreFoundation                      0x000000010670ca33 __CFRunLoopRun + 1123
    20  CoreFoundation                      0x000000010670c366 CFRunLoopRunSpecific + 470
    21  GraphicsServices                    0x000000010b148a3e GSEventRunModal + 161
    22  UIKit                               0x00000001072c48c0 UIApplicationMain + 1282
    23  Startana                            0x0000000105fa2807 main + 135
    24  libdyld.dylib                       0x0000000109306145 start + 1
    25  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

После поиска в Интернете я не могу найти никакой информации о причинах этой проблемы.


person Tom    schedule 03.08.2015    source источник
comment
Попробуйте добавить эту строку messageViewController.senderId = userId после let messageViewController = JSQMessagesViewController()   -  person Bannings    schedule 08.08.2015
comment
Спасибо Бэннингс, это была проблема. Необходимо установить senderId и senderDisplayName. Если вы напишете свой комментарий в качестве ответа, я могу принять его, чтобы вы могли потребовать награду.   -  person Tom    schedule 08.08.2015


Ответы (2)


Я рад слышать, что это решило вашу проблему!

JSQMessagesViewController имеет два параметра актива, senderId и senderDisplayName. Поэтому вы должны установить свой senderId и отображаемое имя.

person Bannings    schedule 09.08.2015

В вашем текущем контроллере, унаследованном JSQMessagesViewController

вам нужно будет сделать пару вещей, сначала добавить функцию настройки

func setup() {
    self.senderId = "1234"
    self.senderDisplayName = "TEST"
}

и последний вызывает эту функцию из

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.setup()
}
person tosha Shah    schedule 18.08.2016