Я искал ответы для этого, но до сих пор не смог решить, как исправить проблему. Этот -[NSNull length]: unrecognized selector sent to instance и этот [NSNull length]: unrecognized selector sent to instance 0x43fe068 не помогли.iOS 8 работает, но iOS 7 сбой - [NSNull length]: непризнанный селектор отправлен в экземпляр
Я работаю над чат-приложением с фреймворком Parse, и у меня возникла проблема с меткой времени, когда сообщение чата вышло из строя, поэтому я удалил строки, которые были не в порядке, из моей базы данных Parse, используя Databrowser. Когда я протестировал приложение, это, похоже, устранило проблему на моем iPhone 6 Plus и на симуляторе iPhone 6, работающем под управлением iOS 8. Однако при открытии той же комнаты для чатов на моем iPhone 5 под управлением iOS 7 приложение последовательно срабатывает следующая ошибка.
-[NSNull length]: unrecognized selector sent to instance
Я понятия не имею, почему не удаление строки может вызвать, чтобы это произошло, и почему только прошивкой 7? Я установил точку останова всех исключений, и вот оскорбительная строка вместе с скриншотом.
self.lastMessageLabel.textColor = [UIColor redColor];
я все еще получаю NSNull length
аварии, даже когда я закомментировать эту строку, но он ломает в общей main.m.
Любые предложения о том, как решить эту проблему, будут оценены. Благодарю.
EDIT 1: Вот код моего ChatView.m, который загружается моим PrivateInbox.
- (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;
}];
}
}
EDIT 2: Я попытался NSNullSafe от Ник Локвуд https://github.com/nicklockwood/NullSafe, что позволило Частной Входящие открыть без сбоев и получает меня мимо ошибки Длина NSNull, но я думаю, что как раз маскирует проблему, и я до сих пор не» я знаю, почему он не сбой на iOS 8, но произошел сбой на iOS 7.
Я только что обновил сообщение с помощью дополнительного кода, чтобы вы могли видеть часть NSNull вызываемого кода. –