2

情報を取得してアプリケーションに入れるために Web サイトからテキストをスキャンするアプリケーションがあります。したがって、この場合、ユーザーが Facebook で持っている通知の数を取得しています。アプリケーションがランダムにクラッシュすることを除いて、すべて正常に動作します。これは、テキスト内の数字を検索するためのコードです。

   NSScanner *theScanner = [NSScanner scannerWithString:facebookTextF];
NSScanner *theScanner2 = [NSScanner scannerWithString:facebookTextFa];


[theScanner scanUpToString:@"Notifications" intoString:&facebookTextFa] ;
[theScanner scanUpToString:@"\n" intoString:&facebookTextF] ;
NSString *NotificationsValue;
if ([facebookTextF isEqualToString:@"Notifications"]) {
    NotificationsValue = @"0";
    NSLog(@"%@", NotificationsValue);

       } else {
    [theScanner2 scanUpToString:@"Notifications" intoString:nil] ;
    [theScanner2 setScanLocation:([theScanner2 scanLocation] + 13)];
    [theScanner2 scanUpToString:@"\n" intoString:&facebookTextFa] ;

               NSLog(@"%@", facebookTextFa);

                    }

このコードはうまく機能しますが、ランダムにクラッシュします。これが私が得るクラッシュログです:

iphone[654:907] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSConcreteScanner setScanLocation:]: Range or index out of bounds'

* First throw call stack: (0x3361b6c3 0x398b397f 0x3361b5e5 0x34d2632f 0x25147 0x34dbf78b 0x335f09ff 0x335f06b1 0x335ef321 0x3356239d 0x33562229 0x39fad31b 0x3402b8f9 0x22267 0x22208) libc++abi.dylib: terminate called throwing an exception

このクラッシュは、何があってもランダムに発生します。たとえば、しばらく実行したままにしておくと、7 分後にランダムにクラッシュします。何が悪いのかわからない。ご覧いただきありがとうございます。さらに情報が必要な場合はお知らせください。

4

2 に答える 2

3

このエラー メッセージが表示されるのは、(明らかに) 文字列に「通知」という単語がない場合があるためです。そのため、theScanner2 はスキャン位置を文字列の末尾に設定します。次に、スキャン位置を 13 文字先に設定しようとすると、文字列の末尾を超えてしまい、範囲外のエラーが発生します。

于 2012-09-01T05:01:03.010 に答える
0

範囲外の NSScanner で ScanLocation を設定しようとすると、スキャンの場所を設定することにより、文字列の末尾以降が存在しないことを意味します

于 2012-09-01T05:03:10.183 に答える