2011-04-16 101 views
1

我有一个叫做getTitle的方法,它在NSString类中,它将删除字符串“(”和“)”之间的任何东西,它也会删除这些字符串。然而,当输入字符串不包含以上任一字符串,该方法将与该错误崩溃:字符串操纵方法的帮助

由于未捕获的异常“NSRangeException”,原因

*终止应用程序:“* - [NSArray的objectAtIndex:] :index 1 beyond bounds [0..0]'

这是由NSArray'a'没有对象引起的。

但是,我似乎无法解决它。请你可以看看下面的代码并指出问题所在?

- (NSString *)getTitle { 
    NSArray *a = [self componentsSeparatedByString:@"("]; 
    if ([a count] > 0) { 
     if ([a objectAtIndex:1] != [NSNull null]) { 
     NSString *b = [a objectAtIndex:1]; 
     NSArray *c = [b componentsSeparatedByString:@")"]; 
     if ([c count] == 0) 
      return self; 
     if ([a objectAtIndex:0] != nil && [c objectAtIndex:1] !=nil) 
      return [[[a objectAtIndex:0] stringByAppendingString:[c objectAtIndex:1]] stringByReplacingOccurrencesOfString:@" -" withString:@" -"]; 
     else 
      return self; 
     } 
      else 
       return self; 
    } 
    else { 
     return self; 
    } 
    return self; 
} 
+0

FYI:编译理解的变量名长度超过一个字符 – 2011-04-16 16:25:48

回答

0

它可能崩溃在这条线:

if ([a objectAtIndex:1] != [NSNull null]) { 

我想你想检查是否componentsSeparatedByString:返回数组与一个以上的组件。正确的方法是检查if ([a count] > 1)(或>= 2)。

0

嗯..听起来像一个字符串:@"foo("。在这种情况下,该阵列将只包含@"foo",并且会崩溃(因为count> 0,但不是2!)。你需要检查,如果数组包含至少2个元素访问的第二个元素在if ([a objectAtIndex:1] != [NSNull null]) {

0

你可以做这样的事情之前:

NSString *str = @"asdf(asdf)asdf"; 
    NSRange range; 
    range = [str rangeOfString:@"("]; 
    if(range.location != NSNotFound){ 
     int start = range.location; 
     range = [str rangeOfString:@")"]; 
     if(range.location!= NSNotFound){ 
      int end = range.location; 
      NSLog(@"%@",[NSString stringWithFormat:@"%@%@",[str substringToIndex:start],[str substringFromIndex:end+1]]); 
     } 
     // return nil; 
    }