如何解决范围或索引越界的运行时错误



我是iPhone的初学者,我得到了如下所示的运行时错误。当我在getColor方法"textView.textColor=[self getColor:appDelegate.pickcolor];"中传递对象时我收到错误

由于未捕获的异常"NSRangeException"而终止应用,原因:"-[__NSCFConstantString 子字符串与范围:]:范围或索引超出范围"

- (UIColor *) getColor: (NSString *) hexColor
{
    //NSLog(@"Calling Getcolor..");
    unsigned int red, green, blue;
    NSRange range;
    range.length = 2;
    range.location = 0; 
    [[NSScanner scannerWithString:[hexColor substringWithRange:range]] scanHexInt:&red];
    //NSLog(@"ntRed :%dn",red);
    range.location = 2; 
    [[NSScanner scannerWithString:[hexColor substringWithRange:range]] scanHexInt:&green];
    //NSLog(@"ntgreen :%dn",green);
    range.location = 4; 
    [[NSScanner scannerWithString:[hexColor substringWithRange:range]] scanHexInt:&blue];   
    //NSLog(@"ntblue :%dn",blue);
    return [UIColor colorWithRed:(float)(red/255.0f) green:(float)(green/255.0f) blue:(float)(blue/255.0f) alpha:1.0f];
}

给出任何建议和解决方案

也许十六进制字符串不是 6 个字符或更多?

可以在方法的开头添加健全性检查以捕获该方案。

- (UIColor *) getColor: (NSString *) hexColor
{
    if ([hexColor length] < 6)
        return nil;
    // ...
}

最新更新