2011-04-16 88 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; 
    }