나는이 문제에 대한 해답을 찾고 있었지만 문제를 해결하는 방법을 아직 풀지 못했습니다. 이 -[NSNull length]: unrecognized selector sent to instance 및이 [NSNull length]: unrecognized selector sent to instance 0x43fe068이 도움이되지 않았습니다.iOS 8이 작동하지만 iOS 7이 - [NSNull 길이]와 충돌 함 : 인식 할 수없는 선택기가 인스턴스로 전송 됨
Parse 백엔드가있는 채팅 앱에서 작업 중이며 채팅 메시지에 타임 스탬프 문제가 발생하여 순서가 어긋나고 있으므로 Parse 데이터베이스에서 순서가 잘못된 행을 삭제했습니다. 데이터 브라우저. 내가이 앱을 테스트했을 때, 내 iPhone 6 Plus 및 iOS 8을 실행하는 iPhone 6 시뮬레이터에서 문제를 해결하는 것처럼 보였습니다. 그러나 iOS 7을 실행하는 iPhone 5에서 동일한 채팅방을 열면 앱이 계속 충돌합니다. 다음 오류.
-[NSNull length]: unrecognized selector sent to instance
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;
}];
}
}
편집 2 : 나는 닉 록우드 https://github.com/nicklockwood/NullSafe에서 NSNullSafe을 시도하고는 개인 편지함이 충돌없이 열 수와 NSNull 길이 오류가 과거의 저를 얻을 수 있지만 그건 그냥 마스크에게 문제를 생각하고 나는 여전히 '돈 iOS 8에서는 충돌이 발생하지 않았지만 iOS 7에서는 충돌이 발생했는지 알 수 없습니다.
방금 추가 코드로 게시물을 업데이트하여 호출되는 코드의 NSNull 부분을 볼 수 있습니다. –