2

I use uitextview for input text multi-line, and limit line of text input. In iOS7, app will be crash when input full text and typing multi stage character(Japanese Language). (I cannot repeat this problem but my customer said ,and it shows the error in Crashlytics, same as in the picture below)

Crash Log Picture from Crashlytics

I cannot debug because in test simulator it does not crash. Here is my code about set text limit line in below:

- (BOOL) textView:(UITextView *)textViewshouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {   

    CGRect textRect = [textView.layoutManager usedRectForTextContainer:textView.textContainer];
    CGFloat sizeAdjustment = textView.font.lineHeight * [UIScreen mainScreen].scale;

    //------------------fix num line-----------------------------
    NSLayoutManager *layoutManager = [textView layoutManager];
    unsigned numberOfLines, index, numberOfGlyphs = [layoutManager numberOfGlyphs];

    NSRange lineRange;

    for (numberOfLines=0, index=0; index < numberOfGlyphs; numberOfLines++) {
        [layoutManager lineFragmentRectForGlyphAtIndex:index
                                        effectiveRange:&lineRange];
        index = NSMaxRange(lineRange);
    }

    if (textRect.size.height >= textView.frame.size.height - textView.contentInset.bottom - sizeAdjustment) {
        if ([text isEqualToString:@"\n"] && numberOfLines < MAX_NUMBER_OF_LINES_ALLOWED-1) {
            [UIView animateWithDuration:0.2 animations:^{
                [textView setContentOffset:CGPointMake(textView.contentOffset.x, textView.contentOffset.y + sizeAdjustment)];
            }];
        }
    }

    [textView scrollRangeToVisible:textView.selectedRange];

    if(numberOfLines < MAX_NUMBER_OF_LINES_ALLOWED) {
        if([text isEqualToString:@"\n"] && numberOfLines == MAX_NUMBER_OF_LINES_ALLOWED-1) {
            return NO;
        } else {
            return numberOfLines < MAX_NUMBER_OF_LINES_ALLOWED;
        }
    } else {
        return NO;
    }  
}

-(void)textViewDidChange:(UITextView *)textView { 
    //------------------fix num line-----------------------------
    NSLayoutManager *layoutManager = [textView layoutManager];
    unsigned numberOfLines, index, numberOfGlyphs = [layoutManager numberOfGlyphs];

    NSRange lineRange;

    for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++){
        (void) [layoutManager lineFragmentRectForGlyphAtIndex:index
                                               effectiveRange:&lineRange];
        index = NSMaxRange(lineRange);
    }

    NSLog(@"numberOfLines %d",numberOfLines);

    if (numberOfLines<MAX_NUMBER_OF_LINES_ALLOWED) {
        _tempComment = self.commentTextView.text;
    } else {
        self.commentTextView.text = _tempComment;
    }
Mirza Sisic
  • 2,401
  • 4
  • 24
  • 38
Tanakorn.K
  • 150
  • 9

0 Answers0