0

私はこれに対する答えを探していましたが、問題を解決する方法をまだ解決できていません。この-[NSNull length]: unrecognized selector sent to instanceおよび this [NSNull length]: unrecognized selector sent to instance 0x43fe068は役に立ちませんでした。

Parse バックエンドを備えたチャット アプリで作業していますが、チャット メッセージのタイムスタンプに問題があり、順序が正しくないため、Databrowser を使用して Parse データベースから順序が正しくない行を削除しました。アプリをテストしたところ、iOS 8 を実行している iPhone 6 Plus と 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 ではクラッシュした理由がわかりません。

4

3 に答える 3