6

Ho un progetto Swift e sto cercando di utilizzare JSQMessagesViewController all'interno di esso. Ho usato i cocoapod per installare il framework e lo sto importando usando una rapida istruzione di importazione.Come spingere correttamente un JSQMessagesViewController

import JSQMessagesViewController 

Fino a questo punto non ci sono errori e tutto viene compilato senza preavviso. Tuttavia, quando provo a trasferire una nuova istanza su un controller di navigazione, l'app si arresta in modo anomalo.

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

La seconda riga del metodo provoca l'arresto anomalo e il messaggio di errore è.

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 

dopo una ricerca online I cant sembrano trovare tutte le informazioni su ciò che provoca questo problema.

+2

Prova a aggiungi questa riga 'messageViewController.senderId = userId' dopo' let messageViewController = JSQMessagesViewController() ' – Bannings

+0

Grazie Bannings, questo è stato il citare in giudizio. SenderId e senderDisplayName dovevano essere impostati. Se scrivi il tuo commento come risposta, posso accettarlo in modo da poter richiedere la taglia. – Tom

risposta

8

Mi fa piacere sapere che è stato risolto il problema!

Il JSQMessagesViewController ha due parametri di asset, lo senderId e lo senderDisplayName. Quindi è necessario impostare il mittente e il nome visualizzato.

2

Nel vostro controller corrente che viene ereditato da JSQMessagesViewController

avrete bisogno di fare alcune cose prima aggiungere la funzione di impostazione

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

e quest'ultimo richiamare quella funzione da

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