我一直在寻找这个问题的答案,但仍然无法解决如何解决这个问题。This -[NSNull length]: unrecognized selector sent to instance and this [NSNull length]: unrecognized selector sent to instance 0x43fe068没有帮助。
我正在开发一个带有 Parse 后端的聊天应用程序,我遇到了一个时间戳问题,聊天消息出现乱序,所以我使用 Databrowser 从我的 Parse 数据库中删除了乱序的行。当我测试应用程序时,这似乎解决了我的 iPhone 6 Plus 和运行 iOS 8 的 iPhone 6 模拟器上的问题。但是,当我在运行 iOS 7 的 iPhone 5s 上打开同一个聊天室时,应用程序始终崩溃以下错误。
-[NSNull length]: unrecognized selector sent to instance
我不知道为什么删除一行会导致这种情况发生,为什么只在 iOS 7 上?我设置了一个 All Exceptions Breakpoint,这是有问题的行以及屏幕截图。
self.lastMessageLabel.textColor = [UIColor redColor];
NSNull length
即使我注释掉上面的行,我仍然会崩溃,但它会在通用 main.m 处中断。
任何有关如何解决此问题的建议将不胜感激。谢谢。
编辑 1:这是我的 PrivateInbox 正在加载的 ChatView.m 中的代码。
- (void)loadMessages {
if (isLoading == NO)
{
isLoading = YES;
JSQMessage *message_last = [messages lastObject];
PFQuery *query = [PFQuery queryWithClassName:PF_CHAT_CLASS_NAME];
[query whereKey:PF_CHAT_ROOM equalTo:chatroomId];
if (message_last != nil) {
[query whereKey:PF_CHAT_SENTDATE greaterThan:[self.dateFormatter stringFromDate:message_last.date]];
}
[query includeKey:PF_CHAT_USER];
[query orderByAscending:PF_CHAT_SENTDATE];
[query addAscendingOrder:PF_CHAT_CREATEDAT];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
if (error == nil)
{
for (PFObject *object in objects)
{
PFUser *user = object[PF_CHAT_USER];
[users addObject:user];
if(![object[PF_CHAT_TEXT] isKindOfClass:[NSNull class]]) {
NSDate* sentDate;
if(object[PF_CHAT_SENTDATE] != nil)
sentDate = [self.dateFormatter dateFromString:object[PF_CHAT_SENTDATE]];
else
sentDate = object.createdAt;
JSQTextMessage *message = [[JSQTextMessage alloc] initWithSenderId:user.objectId senderDisplayName:user.objectId date:sentDate text:object[PF_CHAT_TEXT]];
[messages addObject:message];
} else if(object[PF_CHAT_PHOTO] != nil) {
NSDate* sentDate;
if(object[PF_CHAT_SENTDATE] != nil)
sentDate = [self.dateFormatter dateFromString:object[PF_CHAT_SENTDATE]];
else
sentDate = object.createdAt;
PFFile* photoFile = object[PF_CHAT_PHOTO];
JSQPhotoMediaItem *photoItem = [[JSQPhotoMediaItem alloc] init];
JSQMediaMessage *photoMessage = [[JSQMediaMessage alloc] initWithSenderId:user.objectId
senderDisplayName:user.objectId
date:sentDate
media:photoItem];
[messages addObject:photoMessage];
{
[photoFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
photoItem.image = [UIImage imageWithData:data];
[self.collectionView reloadItemsAtIndexPaths:[NSArray arrayWithObjects:[NSIndexPath indexPathForItem:[messages indexOfObject:photoMessage] inSection:0], nil]];
}];
}
} else if(object[PF_CHAT_VIDEO] != nil) {
NSDate* sentDate;
if(object[PF_CHAT_SENTDATE] != nil)
sentDate = [self.dateFormatter dateFromString:object[PF_CHAT_SENTDATE]];
else
sentDate = object.createdAt;
PFFile* videoFile = object[PF_CHAT_VIDEO];
JSQVideoMediaitem *videoItem = [[JSQVideoMediaitem alloc] initWithFileURL:[NSURL URLWithString:[videoFile url]] isReadyToPlay:YES];
JSQMediaMessage *videoMessage = [[JSQMediaMessage alloc] initWithSenderId:user.objectId
senderDisplayName:user.objectId
date:sentDate
media:videoItem];
[messages addObject:videoMessage];
}
}
if ([objects count] != 0) {
[JSQSystemSoundPlayer jsq_playMessageReceivedSound];
[self resetUnreadCount];
[self finishReceivingMessage];
}
}
else [ProgressHUD showError:@"Network error."];
isLoading = NO;
}];
}
}
编辑 2:我从 Nick Lockwood https://github.com/nicklockwood/NullSafe尝试了 NSNullSafe ,它允许私人收件箱在不崩溃的情况下打开,并且让我通过了 NSNull Length 错误,但我认为这只是掩盖了问题,我仍然没有不知道为什么它在 iOS 8 上没有崩溃,但在 iOS 7 上却崩溃了。