6

Tôi có một dự án Swift và đang cố gắng sử dụng JSQMessagesViewController bên trong nó. Tôi đã sử dụng cocoapods để cài đặt khung và đang nhập nó bằng cách sử dụng một câu lệnh nhập nhanh.Làm thế nào để đẩy một JSQMessagesViewController chính xác

import JSQMessagesViewController 

Đến thời điểm này không có lỗi và mọi thứ biên dịch mà không cần cảnh báo. Tuy nhiên khi tôi cố gắng để đẩy một trường hợp mới vào một bộ điều khiển chuyển hướng ứng dụng bị treo.

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

Dòng thứ hai của phương thức này gây ra sự cố và thông báo lỗi.

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 

Sau khi tìm kiếm trực tuyến Tôi dường như không tìm thấy bất kỳ thông tin nào về nguyên nhân gây ra sự cố này.

+2

Cố gắng thêm dòng này 'messageViewController.senderId = userId' sau' let messageViewController = JSQMessagesViewController() ' – Bannings

+0

Cảm ơn Bannings, đó là kiện. Tên người gửi và người gửiDisplayName cần được đặt. Nếu bạn viết bình luận của bạn như là một câu trả lời tôi có thể chấp nhận nó để bạn có thể yêu cầu tiền thưởng. – Tom

Trả lời

8

Tôi rất vui khi biết rằng nó đã giải quyết được vấn đề của bạn!

JSQMessagesViewController có hai tham số nội dung là senderIdsenderDisplayName. Vì vậy, bạn phải đặt tên người gửi và tên hiển thị của mình.

2

Trong điều khiển hiện tại của bạn được thừa hưởng bởi JSQMessagesViewController

bạn sẽ cần phải làm vài điều trước hết phải thêm chức năng thiết lập

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

và sau gọi hàm từ

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.setup() 
} 
Các vấn đề liên quan