Ios 无效参数不满足要求:messageSenderId!=无

Ios 无效参数不满足要求:messageSenderId!=无,ios,objective-c,iphone,xmppframework,jsqmessagesviewcontroller,Ios,Objective C,Iphone,Xmppframework,Jsqmessagesviewcontroller,我将Cocoapods中的“XBChatModule”库集成到我的项目中 当我第一次运行代码时,它抛出以下错误导致应用程序崩溃,并通过更改XBMessage.m文件得到解决,如下所示 XBMessage.m 但这产生了新的说法 Assertion failure in -[ChatMessagesController collectionView:cellForItemAtIndexPath:], /Users/Neelacharya/Harshit/LIve Projects/Project/

我将Cocoapods中的“XBChatModule”库集成到我的项目中

当我第一次运行代码时,它抛出以下错误导致应用程序崩溃,并通过更改XBMessage.m文件得到解决,如下所示

XBMessage.m

但这产生了新的说法

Assertion failure in -[ChatMessagesController collectionView:cellForItemAtIndexPath:], /Users/Neelacharya/Harshit/LIve Projects/Project/V1/Source/Project/Pods/JSQMessagesViewController/JSQMessagesViewController/Controllers/JSQMessagesViewController.m:452

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: messageSenderId != nil'

*** First throw call stack:
(
    0   CoreFoundation                      0x000000011161ca75 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001112b1bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x000000011161c8da +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x000000010edcfb6f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
    4   CinchGaming                         0x000000010d7be3c5 -[JSQMessagesViewController collectionView:cellForItemAtIndexPath:] + 693
    5   CinchGaming                         0x000000010d7f5f6d -[XBMessageViewController collectionView:cellForItemAtIndexPath:] + 141
    6   UIKit                               0x00000001102b9fab -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 244
    7   UIKit                               0x00000001102bb6e4 -[UICollectionView _updateVisibleCellsNow:] + 3445
    8   UIKit                               0x00000001102bf391 -[UICollectionView layoutSubviews] + 243
    9   UIKit                               0x000000010fd041c3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
    10  QuartzCore                          0x000000010f9d2c58 -[CALayer layoutSublayers] + 150
    11  QuartzCore                          0x000000010f9c787e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    12  QuartzCore                          0x000000010f9c76ee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
    13  QuartzCore                          0x000000010f93536e _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
    14  QuartzCore                          0x000000010f936482 _ZN2CA11Transaction6commitEv + 390
    15  QuartzCore                          0x000000010f936aed _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89
    16  CoreFoundation                      0x0000000111551507 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    17  CoreFoundation                      0x0000000111551460 __CFRunLoopDoObservers + 368
    18  CoreFoundation                      0x0000000111547293 __CFRunLoopRun + 1123
    19  CoreFoundation                      0x0000000111546bc6 CFRunLoopRunSpecific + 470
    20  GraphicsServices                    0x0000000112796a58 GSEventRunModal + 161
    21  UIKit                               0x000000010fc8a580 UIApplicationMain + 1282
    22  CinchGaming                         0x000000010d67e463 main + 115
    23  libdyld.dylib                       0x0000000111b4e145 start + 1
    24  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
我知道崩溃的原因是JSQMessagesViewController.m文件第452行的成员messageSenderId为nil。但我不知道为什么会发生这种情况,以及如何解决它

我也在上向作者报告了这个问题,但没有得到回应


如果您能帮助我解决这个问题,我将不胜感激。

您需要像[self.collectionView registerClass:[UICollectionViewCell class]forCellWithReuseIdentifier:@Cell]一样注册您的类

它认为应用程序在这条线上崩溃了:

NSString *messageSenderId = [messageItem senderId];
NSParameterAssert(messageSenderId != nil);
当我深入研究这个问题时,我发现senderIdis是从XBMessageViewController的loadDataToTable方法设置的。我能找到senderId值的唯一原因是nil,因为您没有设置jidStr和senderId的值

您将需要设置jidStr和senderId以及XBMessageViewController,其中jidStr是receiver,senderId是self-user


希望这能有所帮助。

OK所以messageSenderId==nil。现在,您需要弄清楚通常会填充什么。您还需要知道为什么必须提供XBMessage messageHash的实现,找到作者并询问他/她。不过,stackoverflow的范围有点广。当我看到示例代码时,它是库的旧版本,不需要实现我所做的上述方法,但cocoa pod as库中的代码需要实现该方法。我也向作者发布了这个问题,但他没有回应。为什么要注册?视图控制器的父类已经做了相同的操作。我认为在ChatMessagesController中,您将恢复单元格,因此您要么停止注册,要么不使用CellIdentifier。我不认为CollectionView或其单元格存在问题,这是因为模型类的属性是nil,我想从日志中,也许您应该检查cellForItemAtIndexPath?
NSString *messageSenderId = [messageItem senderId];
NSParameterAssert(messageSenderId != nil);