6

Ich habe ein Swift-Projekt und versuche, JSQMessagesViewController darin zu verwenden. Ich habe Cocoapods verwendet, um das Framework zu installieren, und importiere es mit einer schnellen Importanweisung.Wie man einen JSQMessagesViewController richtig drückt

import JSQMessagesViewController 

Bis zu diesem Punkt gibt es keine Fehler und alles kompiliert ohne Warnung. Wenn ich jedoch versuche, eine neue Instanz auf einen Navigationscontroller zu übertragen, stürzt die App ab.

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

Die zweite Zeile der Methode verursacht den Absturz und die Fehlermeldung ist.

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 

Nach der Suche online finde ich keine Informationen zu finden, was dieses Problem verursacht.

+2

hinzufügen Versuchen Sie, Fügen Sie diese Zeile 'messageViewController.senderId = userId' nach' let messageViewController = JSQMessagesViewController() ' – Bannings

+0

Danke Bannings, das war die ist verklagen. Die senderId und senderDisplayName müssen festgelegt werden. Wenn Sie Ihren Kommentar als Antwort schreiben, kann ich ihn annehmen, damit Sie das Kopfgeld beanspruchen können. – Tom

Antwort

8

Ich bin froh zu hören, dass es dein Problem gelöst hat! Die JSQMessagesViewController haben zwei Asset-Parameter, die senderId und die senderDisplayName. Sie müssen also Ihre Absender-ID und Ihren Anzeigenamen festlegen.

2

In Ihrem aktuellen Controller, die

von JSQMessagesViewController vererbt wird Sie einige Dinge tun müssen, um erste Setup-Funktion

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

und letztere aufrufen, die Funktion von

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