我有一个应用程序,它扫描来自网站的文本,以获取信息并将其放入我的应用程序中。所以在这种情况下,我正在检索用户在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'
* 第一次抛出调用堆栈: (0x3361b6c3 0x398b397f 0x3361b5e5 0x34d2632f 0x25147 0x34dbf78b 0x335f09ff 0x335f06b1 0x335ef321 0x3356239d 0x33562229 0x39fad31b 0x3402b8f9 0x22267 0x22208) libc ++ abi.dylib:terminate调用抛出异常
无论如何,这种崩溃都是随机发生的。例如,如果我让它运行一段时间,7分钟后就会随机崩溃。不确定有什么问题。 谢谢你的期待。如果您需要更多信息,请告诉我。
答案 0 :(得分:3)
您收到该错误消息,因为(显然)该字符串有时没有“Notifications”字样,因此theScanner2将其扫描位置设置为字符串的末尾。然后,当您尝试将扫描位置设置为提前13个字符时,它将超过字符串的结尾,并且您将超出范围错误。
答案 1 :(得分:0)
尝试在NSScanner中的setScanLocation超出范围意味着字符串的结尾,并且通过设置扫描位置不存在