1

私はバーコードアプリに取り組んでおり、CLControllerから場所を取得しているので、場所、速度、その他多くのことを指定しているので、WithRangeをサブストリングして例外を取得しているので、理由とこれをどうすればよいですか?

前もって感謝します。

- (void)locationUpdate:(CLLocation *)location {

locstr = [location description ];
//NSLog(@"current location is %@ ",locstr);

NSString* regexString =@"<(.*?)>";
NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive;
NSError* error = NULL;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexString options:options error:&error];
if (error) {
    //NSLog(@"error is %@", [error description]);
}

NSArray* results = [regex matchesInString:locstr options:0 range:NSMakeRange(1, [locstr length])];
for (NSTextCheckingResult* result in results) {


    resultString = [locstr substringWithRange:result.range];
    //NSLog(@"%@",resultString);
    //life = [[resultString substringWithRange:NSMakeRange(1)] retain];
    resultString =[resultString substringWithRange:NSMakeRange(1,27)];

    resultString = [resultString stringByReplacingOccurrencesOfString:@" "
                                                           withString:@""];
    life = [resultString stringByReplacingOccurrencesOfString:@"+"
                                                   withString:@""];
    life = [[life substringWithRange:NSMakeRange(0,[life length]-1)] retain];
    //NSLog(@"in update %@",life);


}

}

この例外を取得する

2011-11-23 14:24:58.161 BarCodeApp [2632:707] *キャッチされなかった例外'NSRangeException'、理由:'-[NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]:範囲またはインデックスが範囲外であるためにアプリを終了しています'最初のスローコールスタック:(0x326398bf 0x364a31e5 0x326397b9 0x326397db 0x3783846b 0x37838a11 0x37af 0xbe73 0x3548f5df 0x3548ef81 0x3548962f 0x3260db3 データフォーマッタは一時的に利用できません。「続行」後に再試行します。(dlopen関数が見つからないため、共有ライブラリをロードできません。)

4

3 に答える 3

2

ディト・アーディラ

アプリもクラッシュする可能性があります

NSMakeRange(1, [locstr length])

そこでは 1 から [locstr の長さ] までの範囲を定義しますが、[locstr の長さ] は [locstr の長さ]-1 でなければなりません。

文字列「NSMakeRange」の長さは 11 文字です。したがって、その配列インデックスの範囲は 0 ~ 10 です。コードをカバーすると、1 で開始して 1+10=11 で停止するため、範囲は 1-11 になります。

于 2011-11-23T10:29:43.223 に答える
1
resultString =[resultString substringWithRange:NSMakeRange(1,27)];

resultString長さが 27 を超えていますか? どうしても27未満だとクラッシュします。アプリがそこでクラッシュするようです。NSRange を使用した他の場所にもあるかもしれません。

NSZombie を有効にして、アプリがクラッシュする正確な場所を取得します。

于 2011-11-23T10:00:12.877 に答える
1

[CLLocation description]場所、精度などのプロパティを使用する代わりに、なぜ解析するのですか? 説明は、このように使用することは想定されていません。

于 2011-11-23T10:00:37.330 に答える